2013-04-15 81 views
2

我是C++的新手,現在我正在努力編譯和鏈接。 最近我一直在使用cmake,並重新編譯一個庫(mlpack),使用Boost(Cmake does not find boost 1.51 (windows 8))。C++ windows二進制文件:與MinGW一起使用的條件

在第一次嘗試中,我下載了Windows預編譯的二進制文件。這沒有奏效,我已經解釋了我使用的二進制文件是MSVC,而不是MinGW,因此麻煩。事實上,在使用MinGW重新編譯boost之後,事情就好了。

在這裏,我只想得到一個直覺是什麼將MSVC和MinGW的二進制文件之間的差異。我(天真?)認爲二進制文件是特定於OS /處理器的。 MSVC的二進制文件包含什麼使MinGW無法使用它們?

回答

2

只要它們導出純C API,將由MSVC和MinGW生成的工件(靜態/共享庫)(一般適用於其他C編譯器)相對比較容易。這使得C API非常便於攜帶,這也是許多流行庫仍然傾向於使用純C API的主要原因之一。

C++的故事是完全不同的。由不同的C++編譯器產生的工件之間的適當互操作性的最臭名昭着的障礙是name manglingapplication binary interface(ABI)中的差異。這一般適用於所有的C++編譯器,而不僅僅是MinGW和MSVC。如果您想了解更多關於特別是MSVC和MinGW之間的互操作性的缺陷,我建議您閱讀以下文章:

  1. Interoperability of Libraries Created by Different Compiler Brands
  2. Binary-compatible C++ Interfaces
1

要簡單。

窗戶說話French
MinGW講話FrenchGermanEnglish
Unix系統發言German


MSVC二進制文件寫入French
MinGW二進制文件寫在FrenchAngloGerman
UNIX二進制文件寫入German


Windows需要的MinGW的一些GermanEnglish的轉化爲French,纔可以明白一切。


MinGW不像其他程序。它基本上是Windows和Linux之間的迷你操作系統。所以大多數情況下需要修改後的二進制文件才能正常工作。您在MinGW上在Windows上開發程序的事實並不意味着他們將在純Windows上運行,而沒有任何問題。您仍然需要運送或分發您在程序中使用的MinGW庫和可執行文件。

+0

我仍然感到困惑。這是否意味着一旦你爲你的系統進行了編譯,你的庫仍然不能被系統中的所有程序使用?這是否意味着您需要編譯每個現有的編譯器?除了爲特定編譯器編譯的二進制文件之外,你永遠不能下載任何二進制文件?對於語言的比喻,MSVC的圖書館是法語的,MinGW也講法語,窗口講法語,不是? – Vince

+0

@Vince我試圖多解釋一下。不過,我認爲Haroogan爲解決問題的原因提供了一些很好的鏈接。你應該檢查出來。 – stardust

+0

謝謝!只是爲了澄清:現在我下載了iconv二進制文件,並且我有一個包含iconv.lib的文件夾庫......當使用mingw編譯其他庫時,假設鏈接到這個庫是不合理的?如何知道這些庫是否正常? – Vince