compiler-errors - 使用SDL和g++编译找不到-lSDLmain等

标签 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是什么版本时,它说它是版本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/

相关文章:

java - 玩牌时遇到麻烦

c++ - g++ 在应该产生错误时没有产生错误,例如 "error: variable length array of non-POD element type"

c++ - 嵌套 `static_for` 导致编译器错误

c - 'strndup' 未在此范围内定义

C++/Eclipse CDT代码补全问题(Wascana,mingw)

perl - "error: variable length array of non-POD element type"编译 re::engine::RE2 时

c++ - 使用不同文件声明函数/vector 的 C++ 中的多重定义错误

ios - 更新到XCode 5.1后出现错误

c++ - 当分配返回 0 时,带有空异常规范调用构造函数的 operator new

c++ - 未定义对 _Unwind_Resume 和 __gxx_personality_v0 的引用