使用SDL和g ++编译无法找到-lSDLmain等

时间:2012-07-08 02:34:17

标签: compiler-errors g++ mingw sdl sublimetext2

我一直在尝试用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

有人能看出我做错了吗?

为什么我会根据运行命令的位置获得两条不同的消息,以及如何解决此问题?

任何帮助都将不胜感激。

1 个答案:

答案 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构建。