簡體   English   中英

為什么Cygwin和MinGW必要?

[英]Why are Cygwin and MinGW necessary?

我一直試圖了解Cygwin和MinGW究竟是什么,並且發現它非常令人困惑。 如果你想用C ++編程,你不需要一個C ++編譯器嗎? 從我所看到的,似乎他們努力在Windows上提供類似Unix的操作系統,但我沒有看到它的重要性。 我的意思是有一些原因導致C ++無法在Windows上本地編譯? 我還讀到它們包含庫,這是因為C ++核心語言不支持很多函數所以像math.h這樣非常常見的庫會附帶它嗎?

這個解釋一定會在其他地方寫下來,但無論如何......

Cygwin是一個基於Win32 API構建的POSIX兼容運行時。 它提供了一個很大程度上兼容的POSIX C庫,其中有一種帶有包管理器的“Cygwin Distro”,它允許你安裝大量移植到Cygwin下運行的Unix程序。 這些包括Unix shell,GCC(用於Cygwin),X,一堆交叉編譯器等......

MinGW(-w64)是提供Free(如公共域)Win32標頭和庫的項目。 您可以將其視為Windows SDK(舊版)中標題和庫的免費替代品。 這些可以與GCC一起使用。 項目和其他第三方都為Windows提供了本機GCC版本,根本不需要Cygwin。 這些包可以被視為Windows SDK的“完整”(在MinGW(-w64)完整性的范圍內)替代。

請注意,Cygwin還提供了Cygwin到Win32的交叉編譯器:它們在Cygwin平台上運行,但生成本機Win32可執行文件。

另一個播放器MSYS是Cygwin的輕量級分支,它只提供最少量的工具來在Windows上運行autotools構建腳本。 MSYS必須與本機MinGW(-w64)工具一起使用,它不是Cygwin,你不能輕易擴展MSYS。

因此,“MinGW(-w64)”通常指的是整個Free Windows GNU工具鏈(本機或運行在Cygwin之上的交叉編譯器),盡管嚴格來說它只是標題和庫。

要使用GCC的C ++編譯器,我建議您使用我的包(創建32位64位可執行文件)或mingw-builds 或者,您可以安裝Cygwin並使用其setup.exe來安裝MinGW-w64交叉編譯器並從那里使用它,但如果您不需要近乎完美的Unix仿真來構建腳本,我建議不要使用它。

編輯您可能會或可能不會意識到還有另一種替代方案,即舊的Interix,它可以回避Win32子系統並直接在NT內核之上構建。 這是作為Windows Services for UnixSubsystem for Unix Applications (適用於Windows 7Windows 8更早版本的Windows )。 此解決方案適用於Windows Pro / Ultimate版本的客戶,並為您提供最接近您將獲得的本機Unix支持。 哎呀,你甚至可以使用Visual Studio調試你的Unix軟件:)

注意 :這個答案不是假裝詳盡無遺,它只是想從意識形態定義中對概念進行簡單的理解。 使用不精確的語言是有意的。 所以操作系統大師,請不要指望完美的定義。

差異在於POSIX / UNIX和Windows的根源。

POSIX是一個用於操作系統的編程C接口(其中包括Shell和實用程序)。

Unix和更高版本的Linux本身就實現了這樣的接口,Windows本身也沒有。 它有自己的方式來管理操作系統實體(Win32)。 Mac OS也沒有。

GCC是一個在提供POSIX接口的系統上常見的編譯器套件。

要在Windows上使用它,你有 - 這一點 - 兩個選擇:

  • 向Windows添加一個庫(代碼和標題),將POSIX接口添加到Windows(將POSIX調用轉換為Windows調用)並通過編譯它們來使用該庫來移植所有GNU程序(基於Linux):這就是Cygwin所做的。

  • 重寫POSIX程序,使它們內部包含與POSIX-Windows映射相關的所有內容,生成本機Windows可執行文件:這就是MinGW和MSYS的關鍵所在。

Bot方法具有優點和缺點。 簡而言之,在Cygwin中,如果在POSIX下編譯某些東西,它會在Cygwin下編譯(至少在理論上)。 但結果是在windows下運行的unix外觀程序。

在MinGW中,您可以編寫本機Windows程序(通過調用本機Win32 C接口),但是您無法編譯所有使用Windows中不存在的POSIX功能。 最明顯的情況是缺少MinGW的標准<thread>接口和有限的<locale>支持。

暫無
暫無

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

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