2014-12-23 80 views
5

我試圖使用依賴於OpenCV的Visual Studio 12社區構建DLL。在Visual Studio中構建DLL時使用靜態庫

我想包含OpenCV作爲.lib文件,所以我不必單獨分發它,但我需要將我的文件構建爲DLL。

但我無法配置Visual Studio將一個庫導入到DLL中。如果

我的項目 - >屬性 - >配置屬性 - >常規 - >配置類型,

我選擇 「靜態庫(.LIB)」,並於:

我的項目 - >屬性 - >配置屬性 - > VC++目錄 - >庫目錄,

我選擇的路徑,OpenCV的.lib文件,並在

我的項目 - >屬性 - >配置屬性 - >鏈接器 - >添加依賴

我添加了對每個.lib的引用,它的工作原理。

但是,如果我改變配置類型做「動態鏈接庫文件(.dll)」時,Visual Studio告訴我:

opencv_highgui2410d.lib(window.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in VectorsImport.obj 

看來我只能讓.lib文件具有.lib文件。但這似乎不太可能。我已經看過這個了,但我只找到關於如何製作.lib文件或.dll文件或其他文件的指南。這一定很簡單,但我無法弄清楚。我習慣於Linux,其中一個.o可以很容易地包含在.so中。這讓我感到困惑。

+0

從錯誤中,opencv.lib用於動態鏈接,您應該使用動態鏈接。 – Matt

回答

2

的錯誤指示您試圖鏈接已被編譯爲使用靜態C/C++運行時與模塊VectorsImport.obj(可能是從自己的項目),已調試支持OpenCV的模塊編譯爲使用具有調試支持的動態C/C++運行時。 C運行時庫的四種變體在Microsoft SDK中不兼容,因此所有對象文件(來自項目或來自靜態鏈接的庫)都必須與該設置相匹配。在Visual Studio 2010上,它可以在C/C++ - 編譯器 - >代碼生成 - >運行時庫中找到。

請注意(大膽的臉應強調)它不是OpenCV是一個DLL或.lib,但如果OpenCV作爲單獨的DLL鏈接,它允許使用不同類型的C運行時庫,所以不匹配並不重要。

相關問題