64位电脑VSCode配置SDL2环境失败求助:32位正常64位链接错误
问题:VSCode中SDL2 64位开发环境编译失败,32位正常
在VSCode搭建SDL2 64位开发环境时,编译生成64位可执行文件失败,但替换为32位SDL2库、头文件及DLL后,可成功生成32位程序。怀疑问题出在32位MinGW工具链,需要排查并解决64位配置问题。
工作区目录结构
>SDL2 >src >include (SDL2头文件) >lib (SDL2库文件) >main.cpp >Makefile
Makefile内容
all: g++ main.cpp -I src/include -L src/lib -o main -lmingw32 -lSDL2main -lSDL2
编译报错信息
PS D:\vscode\SDL2> make g++ main.cpp -I src/include -L src/lib -o main -lmingw32 -lSDL2main -lSDL2 C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0xf): undefined reference to `SDL_Init' C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0x43): undefined reference to `SDL_CreateWindow' C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0x51): undefined reference to `SDL_GetError' C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0x96): undefined reference to `SDL_PollEvent' C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0xb7): undefined reference to `SDL_DestroyWindow' C:\Users\user\AppData\Local\Temp\ccg3PdH7.o:main.cpp:(.text+0xbc): undefined reference to `SDL_Quit' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status make: *** [Makefile:2: all] Error 1
解决步骤
1. 确认当前MinGW工具链位数
在终端执行以下命令:
g++ -v
查看输出中的target字段:
- 若显示
mingw32,说明当前是32位工具链,必须更换为64位版本 - 64位工具链的
target通常为x86_64-w64-mingw32
2. 更换为64位MinGW-w64工具链
- 卸载原32位MinGW,下载适配的64位MinGW-w64版本
- 将64位MinGW-w64的
bin目录添加到系统环境变量PATH最前端,避免与旧工具链冲突 - 重启终端,再次执行
g++ -v确认工具链已切换为64位
3. 匹配64位SDL2库文件
- 确保
src/lib下的是64位SDL2库文件(文件名通常带有x64标识) src/include中的头文件可通用,但建议使用对应64位包中的头文件保持一致性- 将64位SDL2.dll放到可执行文件同级目录或系统路径中
4. 修改Makefile适配64位编译
- 移除32位专属的
-lmingw32参数,64位编译无需该库 - 调整链接顺序,确保
-lSDL2main和-lSDL2位置正确
修改后的Makefile示例:
all: g++ main.cpp -I src/include -L src/lib -o main -lSDL2main -lSDL2
如果需要静态编译,添加-static参数,并确保链接的是64位静态库:
all: g++ main.cpp -I src/include -L src/lib -o main -static -lSDL2main -lSDL2
5. 验证编译结果
- 执行
make编译,生成main.exe后,用工具(如file命令)验证文件为64位格式 - 运行程序确认SDL功能正常
内容的提问来源于stack exchange,提问作者windcrossroad
相关产品推荐
相关产品推荐

