【问题标题】:Dependency from .lib to another .lib从 .lib 到另一个 .lib 的依赖关系
【发布时间】:2012-01-25 18:13:59
【问题描述】:

我正在尝试使用 Intel TBB 和 IPP 构建 OpenCV v2.3.1。我使用 CMake 生成 Visual Studio 2010 解决方案。构建成功,输出中有 opencv_core231d.lib。

现在我正在尝试将 opencv_core231d.lib 与我的项目链接。但是,在 Linker -> Additional dependencies 中指定它后,我收到错误 LNK1104: cannot open file 'tbb_debug.lib'。

这不是关于未解决的外部问题的错误。链接器需要我提供特定的 .lib 文件!怎么可能?

我已经完成了 opencv_core231d.lib 的 dumpbin /all 并且有几个部分告诉我:

Linker Directives
-----------------
...
/DEFAULTLIB:"tbb_debug.lib"
...

我尝试将 tbb_debug.lib 添加到我的项目的 /NODEFAULTLIB 链接器选项,它解决了问题。但是,我只想在 opencv_core231d.lib 中链接 TBB。

奇怪的是我找不到任何理由将 tbb_debug.lib 添加到 opencv_core231d.lib 的 /DEFAULTLIB 选项。我搜索了解决方案目录中提到 tbb_debug.lib 作为子字符串的所有文件,但唯一匹配的是生成的 .obj 和 .lib 文件 - 而不是任何源文件或项目文件。魔法在哪里?

这个问题不仅与 OpenCV 有关,而且与使用 .lib 文件的整个过程有关。

更新

在 TBB 包含文件 _tbb_windef.h 中有一个 #pragma comment(lib, "tbb_debug.lib") 指令,所以现在我可以理解它的去向了。

我仍然不明白的是为什么它没有在 opencv_core231d.lib 中静态链接?我已将 Librarian -> Link Library Dependencies 选项设置为 Yes。而且我的项目中没有 #pragma comment(lib, "tbb_debug.lib") 指令 - 我检查了预处理器的输出。

谢谢。

【问题讨论】:

  • 我目前的理论为什么不会发生静态链接是因为 tbb_debug.lib 只是对应 tbb_debug.dll 的存根库。

标签: c++ visual-studio-2010 opencv linker


【解决方案1】:

您所包含的某个头文件中可能有一个#pragma comment(lib, "tbb_debug")

这与使用英特尔的线程构建块有关。有关更多信息,请参阅此博客文章:http://software.intel.com/en-us/blogs/2008/07/07/get-tbb-going-by-a-single-click/

【讨论】:

  • 您是对的,谢谢,但问题仍然存在。请参阅我帖子中的更新部分。
  • 据我所知,链接库依赖项选项处理项目->项目引用,而不是从头文件继承的链接器指令。查看 lib 的链接命令行 - 我猜 tbb_debug 不存在。手动包含它,它就会出现。
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多