C++ 使用静态库和DLL时在多个对象中找到的符号

C++ 使用静态库和DLL时在多个对象中找到的符号,c++,visual-c++,dll,linker,static-libraries,C++,Visual C++,Dll,Linker,Static Libraries,我想知道处理以下情况的正确方法是什么: 包含类A、B的library.LIB文件 First.DLL使用类A,因此它与library.lib链接 Second.DLL使用First.DLL、class A和class B中的代码,因此它与First.DLL和library.lib链接 结果(如预期)是类A有多个定义(library.lib和First.lib) 问题是,处理这种情况的正确方法是什么? 我可以想出一些我都不满意的选择: 使用找到的第一个符号(/Force:MULTIPLE)强制

我想知道处理以下情况的正确方法是什么:


  • 包含类A、B的library.LIB文件
  • First.DLL使用类A,因此它与library.lib链接
  • Second.DLL使用First.DLL、class A和class B中的代码,因此它与First.DLL和library.lib链接
结果(如预期)是类A有多个定义(library.lib和First.lib)

问题是,处理这种情况的正确方法是什么?

我可以想出一些我都不满意的选择:

  • 使用找到的第一个符号(/Force:MULTIPLE)强制Second.DLL链接
  • 使First.dll使用类B,因此它将位于First.lib内。这样,Second.lib就不需要和library.lib链接
  • 将library.lib转换为DLL,但假设这是我真正想要避免的

  • 你的情况还不完全清楚。具体来说,类A和/或B是否从First.dll导出?若然,原因为何?“让First.dll使用类B,这样它就在First.lib中”是什么意思?类B以什么方式“在”First.lib中?也许您可以发布最小的复制,带有完整的头和真正的链接器(?)错误?“library.LIB文件包含类A、B”-因此,library.LIB正在编译类A和B。它们不是从First.dll导出的。“您所说的‘使First.dll使用类B,所以它将在First.lib中’是什么意思?”-这是一个可能的解决方案,但不是我喜欢的。这意味着,若First.dll将使用类B,那个么Second.dll就不需要链接到library.LIB,问题就解决了。但是这个解决方案不好,因为First.DLL不需要类B。它是一个“补丁”,而且是一个坏的…“完整的头和真正的链接器(?)错误?”-我没有任何头可以共享。如果您选择使用静态libs,那么对于实际情况来说,这是一个理论问题。链接器错误将是“一个符号有多个实现”,因为First.LIB将具有类a,而library.LIB具有类a。