我一直在尝试用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是什么版本时它会说它是version 4.7.0
。
然后我从SDL网站下载了SDL-devel-1.2.15-mingw32.tar.gz
文件,并将该文件夹解压缩到桌面。
之后,我将所有头文件从/SDL-1.2.15/include/SDL
复制到C:/MinGW/include/SDL
然后我将/SDL-1.2.15/lib
文件夹中的3个文件复制到C:/MinGW/lib folder
他们是:
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
有人能看出我做错了吗?
为什么我会根据运行命令的位置获得两条不同的消息,以及如何解决此问题?
任何帮助都将不胜感激。
答案 0 :(得分:4)
我似乎解决了自己的问题。
我在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构建。