Cygwin vs. MinGW
Cygwin
Cygwin 的目的是希望透過一個 DLL 建立一個系統呼叫轉換層,將原先 unix 世界裡的 system call 呼叫,經由這個 DLL 把它們映對到微軟視窗作業系統的系統呼叫,如此一來就可以很方便在 Windows 底下模擬出一個 unix 平台來,這樣你不需要一個 unix 機器照樣也可以開發 unix 程式。開發好的程式只要拿到 UNIX 平台上就可以使用。同理原來UNIX上諸多 Open source 程式也可以粉方便拿到 Windows 世界來享用,當然UNIX system calls 與 Windows APIs 不盡然可以一對一對應,Cygwin 的目標在於儘可能 Compatible,執行績效倒不是重點考量。
MinGW
MinGW 原來是 Cygwin裡 GNU 開發工具的一個分支,沒 Cygwin 複雜,而且目的也與 Cygwin 不同,他的目的反而是將 GNU 這個 open source, free 的開發工具移植到微軟視窗平台,他直接產生出來的PC視窗平台機器碼,可以說與微軟 Visual Studio 做出來的一摸一樣,可以彼此互相通用。執行效率反而是重點。MinGW 常與 MSYS(Minimal SYStem)搭配使用,MSYS是跑在Windows視窗上的一個瘦身型羽量級 UNIX shell 功能,MinGW與他搭檔還可以進一步做一些更彈性的 Config。
(按: UNIX 世界Open source 的玩法,大約都是用 cvs 或是 Sub version 去取得 Source code,然後 configure --> build --> install 三部曲, configure 會先蒐集你平台上各個工具元件實際安裝路徑,根據它們來調整軟體 Project檔(通常它是一個Makefile),之後才執行 make 去 Build 出軟體,透過 Install 腳本,最後再把作好的軟體 install (安裝)到適當的資料夾來使用。這 MSYS 就可以讓 MinGW 這編譯工具也具備第一步的 configure 功能。
xminGW
xminGW 則是有人突發奇想,再進一步把 minGW 移植回去 UNIX平台,在 UNIX/Linux平台上有個 xminGW的好處是,在 UNIX 機器上可以有一個跨平台編譯器(Cross-compiler),在 UNIX平台上直接編譯產生 Windows 平台上可以執行的機器碼。Cross-compiler 在內嵌式系統開發上常用到,要內嵌的那個平台通常稱作 Target platform(標的平台),一般而言檔次較低功能上也比較陽春,並不適合在上面開發系統,大多數都是假手另一個開發程式的Source platform(可以是 Windows 或是 UNIX/Linux),透過上面的 Development toolchain 裡的 Cross-compiler 去產生出標的平台上的程式碼(通常是另一個OS平台),下載到標的平台來執行。
你的 PDA 可能上面是 Samsung 的 ARM7 或是 ARM9 處理器,他上面的應用程式其實是透過在 Linux 的 ARM Toolchain 跨平台開發出來!
Likewise 你手機也是個內嵌式系統,它上面的應用程式都是透過類似的 Cross-compiler 編譯出來!
Comments
Post a Comment