【问题标题】:Issues compiling SDL with g++使用 g++ 编译 SDL 的问题
【发布时间】: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.alibsdl.a 在哪里? SDL_InitSDL_Quit 需要在某个地方由 sdl 实现,这两个文件告诉链接器它在哪里。
  • 我在C:\MinGW\lib 中有两个名为libSDL2main.alibSDL2.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


【解决方案1】:

您必须确保使用 -L 编译器标志为库指定适当的搜索路径。否则它将不知道在哪里寻找链接。

【讨论】:

  • 这是怎么做的? libSDL2main.alibSDL2.a 的路径是 C:\MinGW\lib
  • 如果库名为 libSDL2main.a 和 libSDL2.a,则必须指定 -lSDL2main 和 -lSDL2(带有“2”)。
猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多