【问题标题】:Linking to a library that links to a lib I'm already linking to链接到链接到我已经链接到的库的库
【发布时间】:2014-02-18 20:06:47
【问题描述】:

请原谅令人费解的标题。

这个问题的设置如下:

我有一个开源库,我已经内置到一堆 .libs 中(如果你好奇的话,VTK)

我有一个使用上述静态库的库。让我们称之为 Lib A。

我还有一个使用上述库(即 VTK)并且也使用 Lib A 的应用程序。

在构建期间,我收到一个链接器错误,告诉我从 Lib A 调用的函数已在链接到应用程序的库中定义(错误:LNK2005)

关于如何解决切换所有内容以进行动态链接的任何想法?

【问题讨论】:

  • 您也无法真正解决这个问题 1. 不要在您的主应用程序中链接到 VTK。 2. 动态链接到VTK 3. 不要在Lib A中包含VTK
  • 那么,如果我将 VTK 链接到 Lib A 并将 Lib A 链接到主应用程序,那会起作用吗?
  • 可以,只要整个VTK都包含在LibA中。虽然,您似乎正在使用 MSVC,但我不确定如何使用 MSVC 可靠地做到这一点,可能使用 /OPT:NOREF 链接器选项。

标签: c++ static-libraries static-linking one-definition-rule


【解决方案1】:

好的。我弄清楚我做错了什么。

Lib A 使用 VTK 的静态构建版本,而主应用程序链接到 VTK 的动态链接版本。

所以问题真的是我在 .lib 和 .dll 中定义了相同的函数,导致链接器失败。

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多