2012-01-25 47 views
0

我正在嘗試使用英特爾TBB和IPP構建OpenCV v2.3.1。我使用CMake來生成Visual Studio 2010解決方案。生成是成功的,我輸出之間有opencv_core231d.lib。從.lib到另一個.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檔案工作的全過程。

更新

有一個#pragma comment(lib, "tbb_debug.lib")指令在TBB包括文件_tbb_windef.h,所以現在我可以從它是在哪裏去理解。

我仍然不明白的是爲什麼它不是靜態的opencv_core231d.lib聯繫?我已將Librarian - > Link Library Dependencies選項設置爲Yes。在我的項目中沒有#pragma comment(lib, "tbb_debug.lib")指令 - 我檢查了預處理器輸出。

謝謝。

+0

我爲什麼靜態鏈接犯規發生目前的理論是,因爲tbb_debug.lib的只是一個存根lib中相應tbb_debug.dll。 – Mikhail

回答

1

有可能是一個#pragma comment(lib, "tbb_debug")在某處要包括的頭文件之一。

這與使用英特爾的線程構建模塊有關。看到這個博客帖子獲取更多信息:http://software.intel.com/en-us/blogs/2008/07/07/get-tbb-going-by-a-single-click/

+0

HAVE_TBB宏很重要。 –

+0

你是對的,謝謝,但問題仍然存在。請參閱我的文章中的更新部分。 – Mikhail

+0

據我所知,鏈接庫依賴項選項處理項目 - >項目引用,而不是從頭繼承的鏈接器指令。看看lib的鏈接命令行 - 我猜tbb_debug不存在。手動包含它,它會出現。 –

相關問題