使用两个不同的第三方库会产生链接错误

时间:2011-01-30 08:02:32

标签: winapi visual-c++ shared-libraries linker-errors

我在VC ++项目中使用了两个不同的第三方库。当我编译它们然后它给我链接错误。

我已经检查了每个库的示例应用程序。 使用第一个库(Lib1)的示例应用程序的设置

  • 1)在静态库中使用MFC
  • 2)多线程调试

使用第一个库(Lib2)的示例应用程序的设置

  • 1)在共享dll中使用MFC
  • 2)多线程Dll

我通过添加

在项目中包含第一个库
#pragma comment(lib, "./lib/abc.lib") 

语句

通过将第二个库添加为附加依赖项,将第二个库添加到项目设置中。

现在它工作正常但是当我尝试使用Lib1中的一些函数时,我得到了像

这样的错误
  

1> libcmtd.lib(tidtable.obj):错误   LNK2005:__ encode_pointer已经   在msvcrtd.lib中定义(MSVCR80D.dll)   1> libcmtd.lib(tidtable.obj):错误   LNK2005:已__decode_pointer   在msvcrtd.lib中定义(MSVCR80D.dll)   1> libcmtd.lib(dbgheap.obj):错误   LNK2005:_malloc已在中定义   MSVCRTD.LIB(MSVCR80D.dll)   1> libcmtd.lib(dbgheap.obj):错误   LNK2005:_calloc已在中定义   MSVCRTD.LIB(MSVCR80D.dll)

任何解决方案如何使用两个库编译我的项目。我没有这些库的源代码,所以我无法编译它们。

1 个答案:

答案 0 :(得分:0)

正确的解决方案是不使用库1的调试版本。你能获得/使用版本构建吗? 这样你就不会链接到系统dll的调试和发布版本。

如果无法获得发布版本,则必须排除调试.libs的使用。

link解释了如何做到这一点。

以d结尾的lib是调试版本(libcmtd.lib)。这些是您要排除的(对于您的发布版本)。对于调试构建,您将需要浏览发布库。