【发布时间】: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