1

我一直在尝试使用 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-devel-1.2.15-mingw32.tar.gz从 SDL 网站下载了文件并将文件夹解压缩到桌面。

之后,我将所有头文件从复制/SDL-1.2.15/include/SDLC:/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

谁能看到我做错了什么?

为什么我会收到两条不同的消息,具体取决于我从哪里运行命令,我该如何解决这个问题?

任何帮助,将不胜感激。

4

1 回答 1

5

我似乎已经解决了我自己的问题。

我在 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 构建。

于 2012-07-08T02:57:57.777 回答