我在VC ++项目中使用了两个不同的第三方库。当我编译它们然后它给我链接错误。
我已经检查了每个库的示例应用程序。 使用第一个库(Lib1)的示例应用程序的设置
使用第一个库(Lib2)的示例应用程序的设置
我通过添加
在项目中包含第一个库#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)
任何解决方案如何使用两个库编译我的项目。我没有这些库的源代码,所以我无法编译它们。
答案 0 :(得分:0)
正确的解决方案是不使用库1的调试版本。你能获得/使用版本构建吗? 这样你就不会链接到系统dll的调试和发布版本。
如果无法获得发布版本,则必须排除调试.libs的使用。
这link解释了如何做到这一点。
以d结尾的lib是调试版本(libcmtd.lib)。这些是您要排除的(对于您的发布版本)。对于调试构建,您将需要浏览发布库。