我正在嘗試使用英特爾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")
指令 - 我檢查了預處理器輸出。
謝謝。
我爲什麼靜態鏈接犯規發生目前的理論是,因爲tbb_debug.lib的只是一個存根lib中相應tbb_debug.dll。 – Mikhail