我一直在尝试使用g++来用SDL编译程序。
该程序只是一个 main.cpp 文件,其中有两条 SDL 测试行,如下所示:
#include "SDL/SDL.h"
using namespace std;
int main(void) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Quit();
return 0;
}
但我的问题是我收到与 SDL 库有关的错误。
首先我安装了MinGW32,以便学习C++11,所以当我询问GCC是什么版本时,它说它是版本4.7.0
。
然后我从 SDL 网站下载了 SDL-devel-1.2.15-mingw32.tar.gz
文件并将该文件夹解压到桌面。
之后,我将所有头文件从 /SDL-1.2.15/include/SDL
复制到 C:/MinGW/include/SDL
然后我将 3 个文件从 /SDL-1.2.15/lib
文件夹复制到 C:/MinGW/lib 文件夹
他们是:
libSDL.dll.a
libSDL.la
libSDLmain.a
最后,我将 SDL.dll
文件从 bin 目录复制到编译 .exe 文件的同一目录。
我认为我已经正确设置了所有内容,但根据我尝试编译的方式,我收到了两条不同的消息。
首先,我尝试使用 Sublime Text 2 编辑器中的构建系统功能来编译它。
这是我告诉 Sublime Text 2 运行的命令:
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "-lmingw32 -lSDLmain -lSDL -mwindows"]
当我运行此命令时,我收到错误消息:
c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/ld.exe: cannot find lmingw32 -lSDLmain -lSDL -mwindows
collect2.exe: error: ld returned 1 exit status
[Finished in 0.3s with exit code 1]
所以我尝试直接从命令提示符进行编译。
我将目录更改为与 main.cpp 相同的目录并运行以下命令:
g++ main.cpp -o main.exe -lmingw32 -lSDLmain -lSDL -mwindows
并收到以下错误消息:
c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../libSDLmain.a(SDL_win32_main.o): In function `console_main':
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:315: undefined reference to `_SDL_main'
collect2.exe: error: ld returned 1 exit status
有人能看出我做错了什么吗?
为什么根据运行命令的位置,我会收到两条不同的消息?如何解决此问题?
如有任何帮助,我们将不胜感激。
最佳答案
我似乎已经解决了我自己的问题。
我在 Windows 命令提示符中遇到的错误是因为 SDL 似乎需要 main()
函数的正确签名,因此我进行了更改:
int main(void) {
至:
int main(int argc, char *argv[]) {
这使我能够从命令提示符进行编译,没有任何问题。
然后,Sublime Text 2 错误被证明是我编写构建系统文件的方式有问题。
我只需要将 -l
标志拆分为单独的值。
以前我的标志是这样写的:
"-lmingw32 -lSDLmain -lSDL -mwindows"
但我需要将其更改为:
"-lmingw32", "-lSDLmain", "-lSDL", "-mwindows"
现在我可以通过按 F7 从 Sublime Text 2 进行构建。
关于compiler-errors - 使用SDL和g++编译找不到-lSDLmain等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380254/