从.lib到另一个.lib的依赖关系

时间:2012-01-25 18:13:59

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

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

现在我正在尝试将opencv_core231d.lib与我的项目相关联。但是,在链接器中指定它之后 - >其他依赖项,我收到错误LNK1104:无法打开文件'tbb_debug.lib'。

这不是关于未解决的外部因素的错误。链接器需要我的特定.lib文件!怎么会这样?

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

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

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

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

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

更新

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

我仍然不明白为什么它在opencv_core231d.lib中没有静态链接?我设置了图书管理员 - > “链接库依赖项”选项为“是”。我的项目中没有#pragma comment(lib, "tbb_debug.lib")指令 - 我检查了预处理器输出。

感谢。

1 个答案:

答案 0 :(得分:2)

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

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