我有靜態C++庫,編譯MSVC和DLL文件(庫稱爲opennurbs)。我需要在項目中使用這個庫,由mingw編譯(我使用Qt創建器,但項目不使用qt庫)。所以,我有沒有解決的外部。我認爲與名稱混爲一談的問題。 如何將.lib文件轉換爲.a庫? 我嘗試使用nm命令,但它不起作用:「foo.dll中沒有符號」。 外部「C」不起作用,因爲它是C++庫。在mingw中使用MSVC++ .lib文件。名稱損壞
4
A
回答
3
一般而言,您將無法使用由另一個程序構建的程序使用一個編譯器構建的C++ DLL。名稱修改只是其中一個問題 - 對於異常處理,RTTI,內存管理甚至類佈局本身(特別是對於多重和虛擬繼承)沒有兼容性保證,僅舉幾個潛在問題。
的幾點建議(他們都不理想):
- 最好的解決辦法是,如果你可以完全避開原來的問題,或者獲取你的編譯器的二進制文件或從源代碼建立(即建立DLL和其客戶端來自MinGW)。
- 如果您可以將DLL的接口公開爲純C API,請執行此操作。例如。 Win32是「C API」,適用於各種編譯器,而不僅僅是C/C++。
- 如果你想爲你的DLL使用「面向對象」的API,不需要可移植性,並且準備投入必要的開發工作,提供一個COM API值得一看。
2
確切地理解你的問題很難,但一個解決方案是顯而易見的。 openNURBS代碼免費提供完全許可許可證。你應該只是download它並直接在mingw中編譯它。
在任何情況下,這將是唯一可行的路線。 C++沒有標準的二進制接口,每個工具都有不同的二進制接口。這甚至可以在相同工具的不同版本之間有所不同。更重要的是,MSVC編譯的庫將依賴於mingw編譯代碼中的不同C++運行時庫。
所以,底線是你需要由你的mingw編譯器編譯的openNURBS。但幸好這是可能的,因爲圖書館是作爲來源分發的。
+0
最新版本不能幫助我。但是我的openNURBS版本不能和mingw一起編譯。不管怎樣,謝謝!我希望我能找到解決方案。 – flamingo
相關問題
- 1. 在mingw中使用msvc lib
- 2. 無效或損壞的lib文件opencv_core220d.lib
- 3. 在C++中名稱修飾或名稱損壞
- 4. OpenCV的:用MSVC 2013堆棧損壞minMaxIdx
- 5. lnk1136 - 無效或損壞.lib
- 6. 文件損壞?
- 7. Primefaces fileDownload非英文文件名損壞
- 8. 如何在MSVC中使用用MingW編譯的庫?
- 9. 從MinGW鏈接到MSVC DLL
- 10. 在QtCreator下使用mingw和msvc
- 11. 使用Java來測試文件損壞和損壞
- 12. 用於C++的gzstream lib:創建的損壞文件
- 13. wwwroot \ lib中的文件被TeamCity上的msdeploy隨機損壞
- 14. Response.TransmitFile損壞文件
- 15. Cpp文件損壞
- 16. Windows文件名得到損壞
- 17. Base64 - 文件損壞
- 18. WebClient.DownloadFile文件損壞
- 19. SAS - 使用在另一個文件中聲明的lib名稱
- 20. IOS文件損壞
- 21. 爲什麼MinGW不需要MSVC需要導入庫(.lib)作爲.dll文件?
- 22. 文件損壞當使用OpenNETCF.Ftp
- 23. 使用PHP和PCLZip損壞ZIP文件
- 24. 壓縮文件(使用Zippy)已損壞
- 25. 原因損壞/ var/lib/logrotate /狀態
- 26. 使用HttpWebRequest上傳非拉丁文件名時損壞的文件名
- 27. 內容頁面中的CSS和控件名稱損壞
- 28. 用java下載文件 - 文件損壞
- 29. Odbcad32.exe文件損壞
- 30. 損壞的jar文件
你說你有一個靜態庫和一個DLL。那是對的嗎?這意味着你有兩個.lib文件。一個用於包含大量代碼的靜態庫,另一個用於只有導入存根的DLL。 –
看起來,你可以注意到(像我一樣,哦!),因爲'cl'和'mingw'的'ABI'不同。抱歉。 – Lol4t0
Microsoft編譯器生成的二進制文件與MinGW/GCC不兼容。在成功鏈接之前,您需要重新編譯庫。 –