Pri*_*ver 6 c++ sdl codeblocks
我最近决定尝试使用CodeBlocks 10.05处理SDL.我从http://www.sdltutorials.com/sdl-tutorial-basics上的教程开始,并尽力遵循它.不幸的是,我遇到了:
..\..\..\..\..\..\SDL\SDL-1.2.15\lib\libSDLmain.a(SDL_win32_main.o):SDL_win32_main.c|| undefined reference to `SDL_main'|
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它.
我已经搜索了本网站上的许多问题和其他教程(主要是关于LazyFoo和CodeBlocks wiki的教程),似乎无法找到解决方案.
当试图按照CodeBlocks wiki上的教程进行操作时,我被告知在给定目录中找不到SDL.h(在创建新的SDL项目时).
CApp.cpp
#include "CApp.h"
#include "SDL\SDL.h"
CApp::CApp(){
Surf_Display=NULL;
Running=true;
}
int CApp::OnExecute(){
if (OnInit()==false){
return -1;
}
SDL_Event Event;
while (Running){
while (SDL_PollEvent(&Event)){
OnEvent(&Event);
}
OnLoop();
OnRender();
}
OnCleanup();
return 0;
}
int main(int argc, char* argv[]){
CApp theApp;
return theApp.OnExecute();
}
Run Code Online (Sandbox Code Playgroud)
CApp.h
#ifndef CAPP_H_INCLUDED
#define CAPP_H_INCLUDED
#include "SDL\SDL.h"
class CApp{
private:
bool Running;
SDL_Surface* Surf_Display;
public:
CApp();
int OnExecute();
public:
bool OnInit();
void OnEvent(SDL_Event* Event);
void OnLoop();
void OnRender();
void OnCleanup();
};
#endif // CAPP_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)
Mar*_*rek 18
尝试#undef main所有SDL相关标头.
更新.这不是一个有效的解决方案!
正如HolyBlackCat指出的那样,这是一个非常草率的修复.SDL替换main函数以执行一些原本不可能的初始化和/或清理,然后回调到实际的用户函数.
拦截的工作原理是用SDL_main一个简单的宏替换用户主函数的名称
#define main SDL_main
Run Code Online (Sandbox Code Playgroud)
然后,用户的功能不再是应用程序的入口点,并使用SDL提供的入口点.建议不#undef加肆地禁用拦截,并且应该争辩说它根本不应该起作用.对于那些在"修复"之后成功编译并运行SDL应用程序的人来说,它必须简单地依赖于平台.
OP错误的正确解决方案是确保包含的文件main被编译和链接,并且该函数具有正确的签名.正如其他人发布的那样.
小智 16
把这些参数放到main函数中.我也有这个问题,几秒钟前我修好了.
int main(int argv,char**args){}
我能想到的问题唯一可能的原因是当你用main它创建文件时,你忘了将它添加到构建目标.

您应该在我的main.cpp所在的列表中看到CApp.cpp.右键单击它,然后单击"属性".单击弹出窗口中的"构建"选项卡.你应该看到这个:

单击"确定",按Ctrl + F11("重建").
祝好运.