Win64下NASM+GoLink链接SDL2静态库失败求助
解决Win64下NASM+GoLink链接SDL2静态库的问题
问题原因
链接命令未指定SDL2静态库的路径与库文件,导致GoLink无法找到SDL_Init、SDL_Quit等符号的定义。
解决方案
1. 调整汇编代码(可选但推荐)
由于你自定义了入口点_start而非SDL默认的WinMain,需在代码开头定义SDL_MAIN_HANDLED宏,避免SDL2main库的入口冲突:
[bits 64] %define SDL_MAIN_HANDLED ; 告知SDL无需处理WinMain入口 extern ExitProcess extern SDL_Init extern SDL_Quit SDL_INIT_VIDEO equ 0x00000020 section .text _start: mov rcx, SDL_INIT_VIDEO call SDL_Init call SDL_Quit xor rcx, rcx call ExitProcess
2. 修改链接命令
在GoLink命令中补充SDL2静态库的路径和库文件:
nasm -f win64 main.asm -o main.obj .\GoLink.exe /console /entry _start /fo prog.exe /libpath:./lib main.obj kernel32.dll SDL2.lib SDL2main.lib
关键说明
/libpath:./lib:指定静态库所在的目录(你的库存放在./lib下)SDL2.lib:SDL2核心功能静态库,提供SDL_Init、SDL_Quit等符号定义SDL2main.lib:SDL2入口处理库,即使自定义入口点,链接它也能避免潜在依赖问题- 若你的静态库后缀为
.a(如MinGW编译产物),需重命名为.lib,GoLink优先识别Windows格式的.lib静态库
验证
执行修改后的构建命令,若无报错即可生成prog.exe可执行文件。
内容的提问来源于stack exchange,提问作者Ayrton
相关产品推荐
相关产品推荐

