我有一箇舊庫(C++),我只能在Windows上的MinGW + MSYS32上構建。從中我可以生成一個.a從GNU libtool生成的靜態庫文件。我的主要開發是在Visual Studio 2008中完成的。如果我嘗試使用MinGW生成的庫並在Visual Studio中將其鏈接起來,它會抱怨缺少外部。這很可能是由於完成了C++符號修改,並且它與.a文件中的內容不匹配。有沒有什麼知道的方法將靜態.a文件轉換爲VC++庫格式?從MinGW .a轉換爲VC++ .lib
回答
如果符號發生了不同的編譯,編譯器使用的是不同的ABI,那麼您將無法「轉換」或編譯的任何庫:原因名稱以不同方式被破壞的原因是有意避免用戶成功使用不同的ABI構建來自對象文件的可執行文件。 ABI定義了參數是如何傳遞的,虛函數表是如何表示的,如何拋出異常,基本數據類型的大小以及其他許多事情。這個名字也是其中的一部分,並且經過精心挑選,與同一平臺上的其他ABI高效並有所不同。最簡單的方法來查看名稱是否確實不同,它是使用兩種編譯器僅使用基本類型編譯文件,然後查看符號(在UNIX上,我將使用nm
;我不是一個Windows程序員,因此我不知道在那裏使用什麼工具)。
基於Wikipedia似乎也MinGW的使用不同的運行時庫:佈局和MinGW的(libstdc++)中使用的C++標準庫和Visual Studio(Dinkumware)的實施不兼容。即使兩個編譯器之間的ABI是相同的,但使用的標準C++庫不是。如果ABI是相同的,則需要將設置替換,以便一個編譯器使用相應其他編譯器的標準庫。沒有辦法用已編譯的庫來做到這一點。我不知道這是否可行。
就我個人而言,我不會費心嘗試鏈接這兩個不同的編譯器之間的東西,因爲它根本不工作。相反,您需要將實現移植到通用編譯器並從那裏開始。
請注意,一般來說,C代碼可用於不同的編譯器。 MinGW GCC可以鏈接到VC .lib文件,但反過來是不可能的。 – rubenvb 2012-02-19 11:03:31
搜索def文件並運行命令,例如lib/machine:i386 /def:test.def它會生成一個導入lib文件的 。
- 1. 如何將VSTS .lib轉換爲MinGW .a?
- 2. 從MinGW靜態庫(.a)到Visual Studio靜態庫(.lib)
- 3. A轉換的VC++ 2003項目詢問msvcpd71d.dll在VC++ 2008
- 4. VC++的轉換
- 5. VC++ libcurl .lib大小
- 6. 轉換成Windows庫的MinGW庫在VC++中給出奇數鏈接6
- 7. 使用VIM從A轉換爲B
- 8. 轉換A○至A A○
- 9. vC++ - 如何將CString轉換爲LPCWSTR
- 10. 參考VC++代碼或轉換爲DLL?
- 11. 如何將VC++代碼轉換爲C#?
- 12. 無法將參數從常量A轉換爲A
- 13. 將lib +頭文件轉換爲DLL
- 14. Matlab將字符串「aaa」轉換爲[「a」,「a」,「a」]數組
- 15. 轉換/翻譯tbl lib idl
- 16. Javascript將int「A」轉換爲「0xA」符號
- 17. 在MinGW QT項目中使用vC++庫
- 18. 將a [] float32轉換爲C * float
- 19. 我將NSString a = @「0x401A」轉換爲int16_t?
- 20. 轉換爲A類在C#.NET
- 21. 自動將A *轉換爲B *
- 22. Opencv L * a * b *轉換爲RGB轉換產生灰度輸出
- 23. [A] MySql.Data.MySqlClient.MySqlConnection不能轉換爲[B] MySql.Data.MySqlClient.MySqlConnection
- 24. 抑制從類型'A'到類型'B'的g ++警告轉換轉換爲constability
- 25. [A] Microsoft.Reporting.WebForms.ReportHierarchy無法轉換爲[B] Microsoft.Reporting.WebForms.ReportHierarchy
- 26. 錯誤將PDF轉換爲PDF/A
- 27. 使用iTextSharp將PDF轉換爲PDFA1-A
- 28. 如何將DataSet a轉換爲DataReader?
- 29. 將PDF轉換爲PDF/A-1
- 30. VBA VLOOKUP轉換爲值給#N/A
不,你不能這樣做。您需要在要用來鏈接它的編譯器中重新編譯二進制文件。 – 2012-02-19 03:15:23