2010-11-09 71 views
2

我在64位版本的Windows上使用64位版本的Visual Studio 2008。我有一個項目鏈接到一個庫(OpenCV 2.1)。我使用相同的編譯器從源代碼編譯OpenCV。我的問題發生在發佈和調試模式。使用Visual Studio 2008在C++中鏈接錯誤和名稱損壞

在屬性面板或我的項目,我已經下添加包含頭文件的目錄C/C++ - >「附加包含目錄」。我已將包含.lib文件的目錄添加到「其他庫目錄」中,並且已將這些庫的名稱添加到「鏈接器」 - >「輸入」下的「其他依賴項」條目中。

當我編譯和鏈接,我得到的錯誤,在這種風格: 錯誤LNK2019:?解析的外部符號_cvFloodFill在函數引用 「INT __cdecl標籤(類cvImage &)」(標籤@@ YAHAAV $ @ cvImage米@ @@ Z)

在鏈接器 - >命令行 - >其他選項中,我添加了標記:/ verbose:lib,並且在編譯器輸出窗口中看到它正在搜索並找到應該包含函數cv210d.lib)。 (我看着在源OpenCV的,發現有問題的功能在這個庫的定義)

1>鏈接...
1>搜索庫
1>搜索C:\ Program Files文件\ OpenCV2。 1 \ lib中\ cv210d.lib:

在OpenCV的源,它具有外部的「C」聲明包裹的所討論的功能的聲明。

我跑DUMPBIN /所有的庫文件,然後我看到以下定義的符號。 (我已經安裝了windows的gnu工具鏈,所以我可以使用grep)。

C:\ Program Files文件\ OpenCV2.1 \ LIB> DUMPBIN /所有cv210d.lib | grep的cvFloodFill
732B4 __imp_cvFloodFille
732B4 cvFloodFill
1CA __imp_cvFloodFill
1CA cvFloodFill

所以,你可以看到,連接器正在尋找符號_cvFloodFill,但沒有定義。只有cvFloodFill和__imp_cvFloodFill被定義,所以它看起來像是有趣的事情發生了,這使得名稱 - 當我編譯庫時與我嘗試鏈接它時不一樣。

所以這就是我卡住的地方。我是否正確解釋這些信息?有什麼我需要做的,以影響名稱 - 強化?我需要用某種不同的標誌來編譯庫嗎?

回答

1

我找到了。 (我發佈了問題和答案,以解決任何有此問題的人的利益,因爲我在搜索網頁時沒有發現任何此類內容)。

當我編譯OpenCV的,在解決方案屬性,配置屬性 - >配置,對所有項目的平臺設置爲64。

當我編譯我的項目時,平臺設置爲Win32。答案是點擊配置管理器,點擊項目的「平臺」下的向下箭頭,選擇「新建」,然後選擇x64。

所以,現在,項目和OpenCV被編譯在同一平臺和一切聯繫,並正常運行。