【问题标题】:Visual Studio "object file does not define any previously undefined symbols"Visual Studio“目标文件未定义任何以前未定义的符号”
【发布时间】:2014-08-07 10:52:01
【问题描述】:

在 Visual Studio 2013 中使用 C++ 时,我遇到了一个非常奇怪的警告/错误。

我有一个静态库和一个控制台应用程序。

静态库导入 4 个第 3 方 .lib 文件及其标头。 控制台应用程序导入静态库和原始 4 个 .lib 文件的标头,以便我可以使用原始 4 个 .lib 和我的 .lib 中的代码。

(我认为在这种情况下这是正确的设置,如果有更好的方法,请告诉!)

但是,当我构建静态库时,我收到一条警告:“LNK4221:此目标文件未定义任何以前未定义的公共符号,因此任何消耗此库的链接操作都不会使用它”。导入的库。

但是,如果不是从库中获取代码,它从哪里获得?如果我从导入中删除 .libs,则构建失败,说明它需要它们!我不知道在这种情况下该怎么办。我很乐意只保留导入的 .libs 并忽略警告,但是当我尝试禁用它们时(在编译器选项中禁用特定警告“4221”下),警告不会被禁用!

编辑:4 个 3rd 方 .lib 是独立的 - 它们不使用彼此的代码,所以我需要将它们全部导入。

我真的很茫然 - 任何建议都将不胜感激。

【问题讨论】:

  • 不,有问题的项目都没有使用预编译的头文件,所以我看不出它有什么帮助:/
  • 您可能有空的 .cpp 文件,其中仅包含 lib 标头,这将产生警告。检查警告以找出 .obj 文件,然后检查相应的 .cpp 文件
  • “构建失败,说明它需要它们”是一个非常奇怪的链接器错误消息。准确引用错误消息非常重要。像这样的链接器警告没什么好担心的,你不能抑制它们。使用 /verbose 链接器选项查看如何使用 .lib 文件。

标签: c++ linker visual-studio-2013 static-libraries


【解决方案1】:

我找到了一种在链接器命令行上使用/ignore: 禁用警告的方法,但我仍然对为什么链接器首先给出警告感到困惑,当删除库作为输入导致多个“未解决外部符号”错误。

哦,好吧,问题(有点)解决了。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2013-08-09
    • 2018-11-13
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多