【问题标题】:Visual Studio: Static Link to Static LibraryVisual Studio:静态库的静态链接
【发布时间】:2012-10-03 10:08:42
【问题描述】:

我在 Visual Studio 中创建了一个静态库(其中没有使用 mfc),并希望在静态链接的 mfc 项目(实际上是 com-dll)中与它链接。

链接mfc-lib 时,我收到一堆消息symbol is already defined。这是因为我两次链接标准 C++ 库(一次在静态库中,另一次在 mfc 项目中)。

我该如何解决? /FORCE:MULTIPLE 有一个解决方法,但我认为这是一个错误的决定。

【问题讨论】:

  • 修复它的最好方法是静态链接所有使用的项目,就这么简单
  • 项目 + 属性、C/C++、代码生成、运行时库设置。
  • 看来问题真的在于链接类型的不同。谢谢。

标签: c++ mfc linker static-libraries


【解决方案1】:

将静态库链接到 DLL 或 EXE 项目时,您需要注意所有项目都已编译为使用相同的运行时库。因此,请将所有项目设置为相同的“使用 MFC”以及相同的“运行库”。如果您不这样做,则可能已编译一个项目以从标准 CRT 获取 fopen 函数,而另一项目可能已编译为从 MFC 获取 fopen 函数。混合这些对于链接器来说是个问题,因为他不知道要使用哪个运行时(在示例中:哪个 fopen)。

将您的 DLL 或 EXE 项目与另一个 DLL 项目链接时,这不是问题。您可以拥有一个不使用 MFC 的 DLL,并将您的 MFC EXE 链接到该 DLL。

如果您有一个在不同项目中经常使用的 util 库,那么您可能会考虑设置不同的构建设置,以便您可以在 DEBUG 和 RELEASE 以及使用和不使用 MFC 的情况下构建您的库。然后在您的 EXE 项目中,您可以选择与您的项目设置匹配的库二进制文件。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多