MASM32引入stb_vorbis库时遭遇LNK2001与LNK1120错误求助
MASM32链接stb_vorbis静态库遇未解析外部符号错误
编译stb_vorbis库的操作流程
使用GCC编译单文件stb_vorbis.c,生成静态库和动态库:
gcc -c stb_vorbis.c -o stb_vorbis.obj ar rcs stb_vorbis.lib stb_vorbis.o g++ -shared -o stb_vorbis.dll stb_vorbis.o -W
MASM32项目中的库引用方式
- 自定义的
stb_vorbis.inc文件内容:
stb_vorbis_decode_filename PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
- 在汇编代码中引用库:
include stb_vorbis.inc includelib stb_vorbis.lib
项目编译脚本(makeit.bat)
ml /c /coff /I "E:\masm32" project.asm rc res.rc link /subsystem:CONSOLE project.obj res.res /libpath:"E:\masm32\lib" /entry:start /out:project.exe
出现的链接错误
- 不调用
stb_vorbis_decode_filename时,项目编译运行正常 - 调用该函数后触发链接错误:
project.obj : error LNK2001: unresolved external symbol _stb_vorbis_decode_filename@16 project.exe : fatal error LNK1120: 1 unresolved externals
- 若在汇编中改用
_stb_vorbis_decode_filename调用,链接器提示__stb_vorbis_decode_filename未解析
已尝试的无效解决方案
- 使用Erol的def2lib、dll2inc工具生成.def和.lib文件,结果仍出现相同错误
- .def文件尝试过两种写法(带/不带下划线):
LIBRARY stb_vorbis EXPORTS "_stb_vorbis_close" "_stb_vorbis_decode_filename" (...)
- 额外限制:dll2inc生成的无参数PROTO SYSCALL无法使用,且目标平台不支持
LoadLibrary,无法通过动态加载DLL绕过问题
内容的提问来源于stack exchange,提问作者GreatCorn
相关产品推荐
相关产品推荐

