【问题标题】:"LNK2019: unresolved external symbol ..." on static library chain [closed]静态库链上的“LNK2019:未解析的外部符号......”[关闭]
【发布时间】:2011-05-02 14:43:31
【问题描述】:

aeon 让我意识到我需要修改我的问题。

我有一个构建得很好的静态 c++ 库链。 对于 3 个库 A、B、C(“->”表示依赖项):如果 A->B 和 A->C 比我构建 A 时一切都构建成功。

我从 C++ 控制台应用程序引用 A,当我构建该应用程序时,我从静态库 B 中得到未解析的符号。 例子: "Error 195 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl ..."

我正在使用 VS2010 并以新方式引用静态库,这意味着我没有将库添加到“其他库”中,而是从他们在 VS2010 上创建的新“引用...”选项中引用它们。在这里解释:http://qualapps.blogspot.com/2010/04/static-library-dependencies-in-visual.html (我尝试使用“附加依赖项”进行引用,但得到了相同的结果)。

知道如何解决这个问题吗?!

【问题讨论】:

  • A->BA->C 是什么意思?
  • 当你有一个应用程序 X 引用了库 A 和库 A 引用库 B 以及库 C 中的某些内容时,那么你必须在链接应用程序时将库 A、B 和 C 添加到链接器X. 如果要在将 X 链接到 A 时自动链接 lib B 和 lib C,则需要在 lib A 中添加带有#pragma 注释的链接器命令。
  • VS2010 有这种引用库的新方法。如果您选择引用 A 并将“链接库依赖项”设置为“True”,那么它也应该链接到引用的库。

标签: c++ static


【解决方案1】:

没有静态库链这样的东西——静态库不携带它所依赖的库的信息。因此,您需要通过链接包含导致错误的函数的库来解决此错误。

【讨论】:

  • VS2010 有这种引用库的新方法。如果您选择引用 A 并将“链接库依赖项”设置为“True”,那么它也应该链接到引用的库。我尝试了你的想法,但没有成功。
  • @Rafa 如果我用我的工具链编译一个库,并把它交给你,我保证里面不会有依赖信息。那么VS 2010有什么魔力呢?
  • 没有魔法。我只是遇到了一个问题,我不明白为什么会这样。它在其他项目上对我有用,我想知道人们是否能想到我在这里可能做错的事情。我明白你在说什么。你是对的。但就我而言,它不起作用。也许你认为我应该检查一下我做错了什么。
  • 这里没有答案。
【解决方案2】:

只是为了获得正确的基础知识 - 确保所有库都与控制台应用程序位于同一位置,当您运行它时。但是,在构建项目时,请确保您的库路径在项目中是正确的。

抱歉,我刚刚注意到您正在使用新方法来引用库,这种新方法到底是什么?请赐教!

【讨论】:

  • 链接时您“未解析的符号”。应用程序的位置根本不重要。
  • @harper:我的部分答案是错误的,我要求错误,尽管它是问题的标题 - 我错过了;相应地编辑了我的答案。但是,我指的是库的位置,而不是应用程序。
  • 您尝试在应用中引用的符号是否从这些库中导出?
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 2014-11-07
  • 2013-06-01
  • 1970-01-01
  • 2021-04-30
  • 2022-01-06
  • 2014-09-19
  • 2012-12-17
相关资源
最近更新 更多