我有一个DLL,我试图使用MSVC 2008与libjpeg LIB链接,为libjpeg函数生成Unresolved External Symbol错误。我还有一个测试项目链接到完全相同的libjpeg库文件和链接没有错误,也运行正常。
我已经对我的LIB路径和依赖LIBS列表设置进行了三重检查,并将它们从EXE项目复制并粘贴到DLL项目中。我仍然得到错误。我确实有libjpeg include包含extern“C”的头文件,因此它不是名称错位问题,未解决的外部警告显示“缺失”的libjpeg函数为未修饰的(只是一个前导下划线和每个后面的@符号参数字节计数后缀)名称)。
当测试EXE项目完全没有问题时,什么可能使DLL项目的链接器无法正确找到函数?我正在使用从ClanLib下载的预编译的32位静态多线程调试库。
谢谢, 罗伯特
答案 0 :(得分:1)
经过大量实验,我找到了解决方案。事实证明问题是由于DLL和LIB项目使用的调用约定不同(在MSVC 2008中,这是在项目属性上设置的,“配置属性 - > C / C ++ - >高级”设置)。 DLL项目设置为__stdcall,LIB为__cdecl。用__stdcall重新编译LIBJPEG修复了问题。