我刚刚安装了SDL 2,我遇到了一些严重的问题。 这是我的代码:
#include <SDL2\SDL.h>
int main(int argc, char* argv[]){
SDL_Init( SDL_INIT_VIDEO );
SDL_Quit();
return 0;
}
我无法编译,因为我收到了标题中描述的错误:
obj\Debug\main.o||In function SDL_main':|
C:\Users\myuser\Desktop\test 2000\main.cpp|5|undefined reference to SDL_Init'|
C:\Users\myuser\Desktop\test 2000\main.cpp|7|undefined reference to SDL_Quit'|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(main.o):main.c|| undefined reference to WinMain@16'|
||=== Build finished: 3 errors, 0 warnings ===|
答案 0 :(得分:5)
发布编译器命令。 例如:g ++ / gcc ....
你可能没有链接库。
http://content.gpwiki.org/index.php/SDL:Tutorials:Setup 你应该有一个lib的路径,包含在ide中。 (我发现你正在使用代码块)
添加到链接器设置: -lmingw32 -lSDLmain -lSDL
答案 1 :(得分:4)
我想你想要
#define SDL_MAIN_HANDLED
在你的主文件中,在行
之前#include <SDL2/SDL.h>
答案 2 :(得分:3)
虽然接受的答案有效(如果你完全遵循它,或阅读评论), 有一点需要注意:您必须遵循链接库的顺序
g++ 01_hello_SDL.cpp -I{add correct path here}/include/SDL2 -L{add correct path here}/lib -lmingw32 -lSDL2main -lSDL2
如果您不希望控制台与窗口一起运行,请将-mwindows
添加到选项
答案 3 :(得分:2)
我一直在努力奋斗。
只需将sdl文件从程序文件中移出到桌面或文档等,然后从那里将它们链接到C.
认为它与Windows有关,不允许C访问它们。
希望这会有所帮助 凉爽
答案 4 :(得分:1)
我通过交换
解决了这个问题int main(int argc, char* argv[])
与
对齐int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
不知道为什么说实话,然后我再次转向SFML。
答案 5 :(得分:1)
您需要使用相同的顺序将这些添加到链接器库:
mingw32
SDL2main
SDL2
请注意,订单很重要。
答案 6 :(得分:1)
如果您使用的是 cLion IDE 中默认的 CMakeLists.txt,您应该在末尾添加这一行:
target_link_libraries(space_fighters mingw32 SDL2main SDL2)
我遇到了同样的问题,我的情况是因为我错过了“mingw32”
答案 7 :(得分:-2)
尝试在Windows 10上的Eclipse CDT 1909中构建和运行一个项目时,我遇到了一个类似的问题,这是我最初在MacOS上的Eclipse中创建的。
我发现使用minGW64编译器可以执行以下步骤。
RMB单击项目,然后选择属性。 在“项目属性”>“ C / C ++生成”中,通过LMB创建一个新的C / C ++ Build配置,单击“管理配置”,然后单击“新建”,将其命名为Debug_Windows,将“复制设置”设置为默认配置,使其处于活动状态,LMB单击“确定”,将配置设置为Debug_Windows。
将项目属性> C / C ++构建>构建器设置>构建命令>当前构建器设置为CDT内部构建器
将项目属性> C / C ++构建>构建器设置>工具链编辑器>当前工具链设置为MinGW GCC
将项目属性> C / C ++构建>构建器设置>工具链编辑器>当前构建器设置为CDT Internal Builder
将以下路径添加到“项目属性”>“ C / C ++构建”>“设置”>“ GCC C ++编译器”>“包含” “ C:\ Applications \ Library \ SDL2-2.0.9 \ x86_64-w64-mingw32 \ include \ SDL2”
将以下路径添加到“项目属性”>“ C / C ++构建”>“设置”>“ GCC C ++链接器”>“库” “ C:\ Applications \ Library \ SDL2-2.0.9 \ x86_64-w64-mingw32 \ lib”
将以下库按顺序添加到“项目属性”>“ C / C ++构建”>“设置”>“ GCC C ++链接器”>“库” SLD2主要 SDL
导航到“项目属性”>“运行/调试设置”,LMB单击“新建”,选择“ C / C ++应用程序”,LMB单击“确定”,在“ C / C ++应用程序”字段中输入 Debug_Windows \ project_name.exe(将project_name替换为正确的值)。
将构建配置更改为Debug_Windows。
关闭项目属性。
添加预处理器指令 #定义SDL_MAIN_HANDLED 在包含主要功能的文件顶部。 没有预处理器指令,程序将无法正确链接。
运行程序RMB单击项目,然后选择“运行方式”>“运行配置”,然后选择为构建创建的运行配置。
将SDL2.dll复制到项目目录结构的顶层,就像将其复制到Debug或Debug_Windows目录一样,每次构建项目时都会将其删除。
我发现的要点是,不必在链接器库中包含mingw32,并且#define SDL_MAIN_HANDLED必须位于包含main的文件中,并位于#include之前。