我正在尝试使用英特尔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")
指令 - 我检查了预处理器输出。
感谢。
答案 0 :(得分:2)
您所包含的某个头文件中可能存在#pragma comment(lib, "tbb_debug")
。
这与使用英特尔的线程构建块有关。有关详细信息,请参阅此博客文章:http://software.intel.com/en-us/blogs/2008/07/07/get-tbb-going-by-a-single-click/