Clang可找到库,切换至MinGW32编译时无法定位SDL2库
解决MinGW交叉编译SDL2/SDL2_gfx时头文件找不到的问题
你遇到的问题根源是:Ubuntu上通过apt安装的libsdl2-gfx-dev等包是给本地Linux编译器(比如Clang/GCC)用的,MinGW交叉编译器需要的是针对Windows平台预编译的SDL2/SDL2_gfx库和头文件,这些包和本地Linux版本不通用。
步骤1:安装MinGW版本的SDL2和SDL2_gfx依赖
在Ubuntu终端执行以下命令,安装交叉编译用的Windows版本SDL2库:
sudo apt-get update sudo apt-get install libsdl2-mingw-w64 libsdl2-gfx-mingw-w64
这些包会把Windows平台的SDL2头文件和库安装到/usr/x86_64-w64-mingw32/目录下,供交叉编译器调用。
步骤2:修改Makefile适配交叉编译
原来的Makefile用了sdl2-config工具,这是针对本地Linux环境的,交叉编译时需要替换为MinGW对应的配置工具,或者手动指定路径:
方法1:使用MinGW的sdl2-config工具
如果安装完上述包后存在x86_64-w64-mingw32-sdl2-config命令,直接修改Makefile的编译参数:
CC = x86_64-w64-mingw32-g++ CFLAGS = $(shell x86_64-w64-mingw32-sdl2-config --cflags) -std=c++11 LIBS = $(shell x86_64-w64-mingw32-sdl2-config --libs) -lSDL2_gfx main.exe: main.cpp $(CC) $(CFLAGS) $< -o $@ $(LIBS)
方法2:手动指定头文件和库路径
如果找不到MinGW版的sdl2-config,直接硬编码路径(路径可能因Ubuntu版本略有差异,以实际安装目录为准):
CC = x86_64-w64-mingw32-g++ CFLAGS = -I/usr/x86_64-w64-mingw32/include/SDL2 -std=c++11 LIBS = -L/usr/x86_64-w64-mingw32/lib -lSDL2 -lSDL2_gfx -lSDL2main main.exe: main.cpp $(CC) $(CFLAGS) $< -o $@ $(LIBS)
步骤3:直接编译的命令示例
如果不想用Makefile,直接在终端执行交叉编译命令:
x86_64-w64-mingw32-g++ main.cpp -o main.exe -I/usr/x86_64-w64-mingw32/include/SDL2 -L/usr/x86_64-w64-mingw32/lib -lSDL2 -lSDL2_gfx -lSDL2main
额外注意事项
- 编译生成的
.exe文件需要把Windows版的SDL2.dll和SDL2_gfx.dll放到同一目录下才能运行(可以从/usr/x86_64-w64-mingw32/lib/目录复制对应的DLL文件)。 - 如果需要静态编译,需要在编译参数中加上
-static,并链接静态库版本(比如-lSDL2-static等,具体看安装的库文件)。
内容的提问来源于stack exchange,提问作者Ferenc Fazekas
相关产品推荐
相关产品推荐

