1

我有一个 DLL,我正在尝试使用 MSVC 2008 与 libjpeg LIB 链接,它为 libjpeg 函数生成未解决的外部符号错误。我还有一个测试项目,它与完全相同的 libjpeg 库文件链接,并且链接没有错误并且运行良好。

我已经三重检查了我的 LIB 路径和依赖 LIBS 列表设置,并将它们从 EXE 项目复制并粘贴到 DLL 项目中。我仍然得到错误。我确实有 libjpeg 包含由 extern "C" 包围的标头,因此这不是名称修改问题,并且未解决的外部警告显示“丢失”的 libjpeg 函数未修饰(只是一个前导下划线和每个之后的 @ 符号参数字节计数后缀姓名)。

在测试EXE项目完全没有问题的情况下,是什么导致DLL项目的链接器无法正确找到函数?我正在使用从 ClanLib 下载的预编译的 32 位静态多线程调试库。

谢谢,罗伯特

4

1 回答 1

1

经过大量的实验,我找到了解决方案。事实证明,问题是由于 DLL 和 LIB 项目使用的调用约定不同(在 MSVC 2008 中,这是在项目属性中设置的,“配置属性 -> C/C++ -> 高级”设置。DLL项目设置为 __stdcall,LIB 为 __cdecl。使用 __stdcall 重新编译 LIBJPEG 解决了该问题。

于 2010-04-04T18:12:25.900 回答