Winapi 使用两个不同的第三方库会导致链接错误

Winapi 使用两个不同的第三方库会导致链接错误,winapi,visual-c++,shared-libraries,linker-errors,Winapi,Visual C++,Shared Libraries,Linker Errors,我在VC++项目中使用了两个不同的第三方库。当我编译它们时,它会给我链接错误 我已经检查了每个库的示例应用程序。 带有第一个库(Lib1)的示例应用程序的设置 1) 在静态库中使用MFC 2) 多线程调试 带有第一个库(Lib2)的示例应用程序的设置 1) 在共享dll中使用MFC 2) 多线程动态链接库 我在项目中添加了第一个库 #pragma comment(lib, "./lib/abc.lib") 声明 通过将第二个库作为附加依赖项添加到项目设置中,可以将其添加到项目设置中

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

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

  • 1) 在静态库中使用MFC
  • 2) 多线程调试
带有第一个库(Lib2)的示例应用程序的设置

  • 1) 在共享dll中使用MFC
  • 2) 多线程动态链接库
我在项目中添加了第一个库

#pragma comment(lib, "./lib/abc.lib") 
声明

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

现在它工作得很好,但是当我尝试使用Lib1中的一些函数时,会出现如下错误

1> libcmtd.lib(tidtable.obj):错误 LNK2005:\uuuu编码\u指针已存在 在msvcrdt.lib(MSVCR80D.dll)中定义 1> libcmtd.lib(tidtable.obj):错误 LNK2005:\uuuu解码\u指针已存在 在msvcrdt.lib(MSVCR80D.dll)中定义 1> libcmtd.lib(dbgheap.obj):错误 LNK2005:_malloc已在中定义 msvcrdt.lib(MSVCR80D.dll) 1> libcmtd.lib(dbgheap.obj):错误 LNK2005:_calloc已在中定义 msvcrdt.lib(MSVCR80D.dll)


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

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

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

这说明了如何做


以d结尾的lib是调试版本(libcmtd.lib)。这些是您希望排除的(用于发布版本)。对于调试版本,您需要删除发行版库。

我无法获得发行版。我添加了NODEFAULTLIB,但出现了很多错误。看起来我需要显式地指定所有这些库。我大约有700个错误。是否有我可以为MFC项目包含的默认库的列表?与其包含您需要的库,不如排除您不需要的库。在您的示例中,对于发布版本,忽略libcmtd.lib。然后会发生什么?我添加了两个库libcmtd.lib msvctd.lib作为“忽略特定库”,但仍然会出现错误,如1>链接。。。1> libcmtd.lib(tidtable.obj):错误LNK2005:u encode_指针已在msvcrd.lib(MSVCR80D.dll)1>libcmtd.lib(tidtable.obj)中定义:错误LNK2005:u decode_指针已在msvcrd.lib(MSVCR80D.dll)中定义如果我忽略这两个库,那么上面的错误怎么会出现呢?你仍然会遇到问题,因为一个库是为CRT的DLL版本构建的,另一个是为.lib版本构建的。一般来说,你不想混搭,这是一个灾难的配方。