2

我们有一个在发布模式下使用 MS Visual Studio 2010 构建的 DLL。我们将此 DLL 与 .lib 文件一起提供给不同的客户。DLL 中的函数通过以下方式导出:

extern "C" __declspec(dllexport) int analyze(int id);

我们的客户有两个使用此 DLL 的应用程序。这两个应用程序都使用以下方式导入 DLL 函数:

extern "C" __declspec(dllimport) int analyze(int id);

其中一个应用程序是使用 MS Visual Studio 2010 构建的。此应用程序可以在调试和发布模式下成功构建。

不幸的是,另一个应用程序必须使用 MS Visual Studio 2005 作为其构建环境。在这个应用程序中,可以成功构建发布版本,但是,当我们尝试在调试模式下构建时,我们会收到链接器错误:

LNK2019:函数“void __cdecl process(char const *,char const *)”(?process@@ABCERFG0@Z) 中引用了未解析的外部符号 __imp_analyze

有人可以帮助我了解我们在这里缺少什么吗?我们是否以不能跨编译器移植的方式导出函数?解决方案是什么?

问候,

4

1 回答 1

2

.obj 文件格式在 VS2005 和 VS2010 之间高度保守。这应该不是问题,尤其是因为它是一个简单的未损坏符号引用。尤其是当它在发布配置中工作但在调试中不起作用时。一个简单的解释总是比一个复杂的解释更好:您的客户只是忘记将您的 .lib 文件添加到链接器的附加依赖项设置中。

请注意,需要对两种配置进行设置更改,请使用对话框左上角的“配置”组合。

您可以通过在 .h 文件中使用 #pragma comment(lib, "mumble.lib") 来帮助您的客户陷入成功的陷阱。

于 2010-09-24T13:28:43.617 回答