簡體   English   中英

C++ windows 二進制文件:與 MinGW 一起使用的條件

[英]C++ windows binaries: conditions to be used with MinGW

我是 C++ 新手,現在正在努力編譯和鏈接。 最近我一直在使用 cmake 和 make 重新編譯一個使用 Boost 的庫(mlpack)( Cmake 沒有找到 boost 1.51 (windows 8) )。

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

在這里,我只想了解 MSVC 和 MinGW 的二進制文件之間的區別。 我(天真地?)認為二進制文件是特定於操作系統/處理器的。 MSVC 的二進制文件包含哪些使 MinGW 無法使用它們的內容?

組合由 MSVC 和 MinGW 生成的工件(靜態/共享庫)相對容易(這通常適用於其他 C 編譯器),只要它們導出純 C API。 這使得 C API 非常可移植,這也是許多流行庫仍然喜歡使用純 C API 的主要原因之一。

C++ 的故事完全不同。 由不同 C++ 編譯器生成的工件之間正確互操作性的最臭名昭著的障礙是名稱修改應用程序二進制接口(ABI) 的差異。 這通常適用於所有 C++ 編譯器,而不僅僅是 MinGW 和 MSVC。 如果您想詳細了解 MSVC 和 MinGW 之間的互操作性陷阱,我建議您閱讀以下文章:

  1. 不同編譯器品牌創建的庫的互操作性
  2. 二進制兼容的 C++ 接口

要簡單。

Windows 講French
MinGW 會說FrenchGermanEnglish
Unix 系統說German


MSVC 二進制文件是用French編寫的。
MinGW 二進制文件是用FrenchAngloGerman編寫的。
UNIX 二進制文件是用German編寫的。


Windows 需要 MinGW 將一些GermanEnglishFrench然后才能理解所有內容。


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM