【发布时间】:2013-12-15 02:37:22
【问题描述】:
当我尝试编译文件时
#include "SDL2\SDL.h"
int main( int argc, char* argv[] )
{
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Quit SDL
SDL_Quit();
return 0;
}
——来自 SDL wiki 的示例——在命令行中使用
g++ -o SDL_Test.exe SDL_Test.cpp -lmingw32 -lSDLmain -lSDL
我收到一条错误消息,提示我的计算机找不到 -lSDLmain 和 -lSDL。没有库的东西,它就很难解释函数。
我认为问题与 -l 的事情有关,但我不知道他们做了什么....
我的电脑是 64 位的,如果这有什么不同的话。我将 x84_64-mingw32 bin、include 和 lib 复制到 C:\MinGW 版本中。
我主要希望能明确地解决我的问题,但如果你能尝试解释 -l 和其他 - 事情,那就太棒了。
-::- greatwolf 在聊天中回答:原来我使用的是 32 位 MinGW 和 64 位 SDL 文件;我只需要用 32 位版本替换 64 位文件。此外,我必须将编译器指向我的 SDL2.dll 文件。结束编译命令为g++ -o SDL_Test.exe SDL_Test.cpp -LC:\MinGW\lib -lmingw32 -lSDL2main C:\MinGW\bin\SDL2.dll。
【问题讨论】:
-
libsdlmain.a和libsdl.a在哪里?SDL_Init和SDL_Quit需要在某个地方由 sdl 实现,这两个文件告诉链接器它在哪里。 -
我在
C:\MinGW\lib中有两个名为libSDL2main.a和libSDL2.a的文件。 -
g++ -o SDL_Test.exe SDL_Test.cpp -LC:\MinGW\lib -lmingw32 -lSDL2main -lSDL2 -
非常感谢;摆脱了“找不到”错误,但现在它对 SDL_Init/Quit 说“未定义的引用”。我尝试添加
-mwindows,但没有运气。有没有可能,即使我有一台 64 位计算机,但我下载了 32 位 MinGW,这就是导致它无法工作的原因,或者在这种情况下它甚至不会达到这一点? -
尝试用 sdl2.dll 替换
-lSDL2。确保指定其完整的绝对路径。
标签: c++ compilation g++ mingw sdl