Jak*_*cas 1 sdl mingw compiler-errors g++ 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;
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是我遇到了与 SDL 库有关的错误。
首先我安装了 MinGW32 以便我可以学习 C++11,所以当我问 GCC 是什么版本时,它说它是version 4.7.0.
然后我SDL-devel-1.2.15-mingw32.tar.gz从 SDL 网站下载了该文件并将文件夹解压缩到桌面。
之后,我将所有头文件复制/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
Run Code Online (Sandbox Code Playgroud)
最后,我将SDL.dll文件从 bin 目录复制到编译 .exe 文件的同一目录中。
我想我已经正确设置了所有内容,但是根据我尝试编译它的方式,我收到了两条不同的消息。
首先,我尝试使用 Sublime Text 2 编辑器中的构建系统功能编译它。
这是我告诉 Sublime Text 2 运行的命令:
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "-lmingw32 -lSDLmain -lSDL -mwindows"]
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到错误消息:
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]
Run Code Online (Sandbox Code Playgroud)
因此,我尝试直接从命令提示符进行编译。
我将目录更改为与 main.cpp 相同的目录并运行以下命令:
g++ main.cpp -o main.exe -lmingw32 -lSDLmain -lSDL -mwindows
Run Code Online (Sandbox Code Playgroud)
并收到以下错误消息:
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
Run Code Online (Sandbox Code Playgroud)
谁能看到我做错了什么?
为什么根据我运行命令的位置,我会收到两条不同的消息,我该如何解决这个问题?
任何帮助,将不胜感激。
我似乎已经解决了我自己的问题。
我在 Windows 命令提示符中遇到的错误是因为 SDL 似乎需要main()函数的正确签名,所以我更改了:
int main(void) {
Run Code Online (Sandbox Code Playgroud)
到:
int main(int argc, char *argv[]) {
Run Code Online (Sandbox Code Playgroud)
这使我可以从命令提示符进行编译而不会出现任何问题。
然后 Sublime Text 2 错误被证明是我编写构建系统文件的方式有问题。
我只需要将-l标志拆分为单独的值。
以前我有这样写的标志:
"-lmingw32 -lSDLmain -lSDL -mwindows"
Run Code Online (Sandbox Code Playgroud)
但我需要把它改成这样:
"-lmingw32", "-lSDLmain", "-lSDL", "-mwindows"
Run Code Online (Sandbox Code Playgroud)
现在我可以通过按 F7 来从 Sublime Text 2 构建。
| 归档时间: |
|
| 查看次数: |
7379 次 |
| 最近记录: |