在 windows 上无法将 SDL 与 MinGW 结合使用
Fail to use SDL with MinGW on windows
我想开始学习使用 SDL 编程。所以我为 windows 下载了 x86,
把所有的库和包含在 MinGW 中。但是当我编译时它不知道 SDL 函数存在。
# define SDL_MAIN_HANDLED // somehow it want it to not define its own main
#include <iostream>
#include <sdl2/SDL.h>
using namespace std;
int main( int argc, char* argv[] ) {
SDL_SetMainReady(); // just for check
return 0;
}
我读到链接需要按特定顺序(mingw32、SDL2main 然后是 libSDL2),但我认为 Eclipse 运行 是一个错误的编译命令。
eclipse 命令:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\fire.o" "..\src\fire.cpp"
g++ -o fire.exe "src\fire.o" -lmingw32 -lSDL2main -llibSDL2
src\fire.o: In function `main':
C:\Or\C++\Projects\fire\Debug/../src/fire.cpp:16: undefined reference to `SDL_SetMainReady'
collect2.exe: error: ld returned 1 exit status
你觉得我漏掉了什么吗?
我认为您需要将 -libSDL2 更改为 -lSDL2。
好的,我解决了。我不确定问题是缺乏对 32 位的支持,还是 minGW 和 SDL 来自可能不匹配的不同编译器。
但我所做的是从我的电脑中删除 minGW 并下载 WinBuild。 WinBuild 是一个下载管理器,提供大量库和工具,包括 minGW64 位和 SDL。
优点是它们都是从具有相同配置的相同编译器编译的。
之后我将 minGW 的路径更改为 WinBuild 文件夹内的新 64 位路径,将 Winbuild 中的 g++ 添加到该路径并重新启动。
然后,添加和链接工作没有任何问题!
我仍然需要在开头加上 # define SDL_MAIN_HANDLED
才能让它工作,但它的工作!
我想开始学习使用 SDL 编程。所以我为 windows 下载了 x86, 把所有的库和包含在 MinGW 中。但是当我编译时它不知道 SDL 函数存在。
# define SDL_MAIN_HANDLED // somehow it want it to not define its own main
#include <iostream>
#include <sdl2/SDL.h>
using namespace std;
int main( int argc, char* argv[] ) {
SDL_SetMainReady(); // just for check
return 0;
}
我读到链接需要按特定顺序(mingw32、SDL2main 然后是 libSDL2),但我认为 Eclipse 运行 是一个错误的编译命令。
eclipse 命令:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\fire.o" "..\src\fire.cpp"
g++ -o fire.exe "src\fire.o" -lmingw32 -lSDL2main -llibSDL2
src\fire.o: In function `main':
C:\Or\C++\Projects\fire\Debug/../src/fire.cpp:16: undefined reference to `SDL_SetMainReady'
collect2.exe: error: ld returned 1 exit status
你觉得我漏掉了什么吗?
我认为您需要将 -libSDL2 更改为 -lSDL2。
好的,我解决了。我不确定问题是缺乏对 32 位的支持,还是 minGW 和 SDL 来自可能不匹配的不同编译器。
但我所做的是从我的电脑中删除 minGW 并下载 WinBuild。 WinBuild 是一个下载管理器,提供大量库和工具,包括 minGW64 位和 SDL。 优点是它们都是从具有相同配置的相同编译器编译的。
之后我将 minGW 的路径更改为 WinBuild 文件夹内的新 64 位路径,将 Winbuild 中的 g++ 添加到该路径并重新启动。
然后,添加和链接工作没有任何问题!
我仍然需要在开头加上 # define SDL_MAIN_HANDLED
才能让它工作,但它的工作!