使用Windows7中的POSIX子系統進行開發Unix程序(與Visual Studio2008的集成使用)

使用 Windows7已有一年多了,一日閒來無事,偶然發現 Windows 7  中的“打開關閉 windows 功能”中有一個“ 基於UNIX 的應用程序子系統 ”,很是好奇,就試着安裝了一下,從官網下載了一個包Utilities and SDK for Subsystem for UNIX-based Applications_X86 ,大概 250MB ,安裝完成後,果然很有效,系統多了一個 POSIX子系統 !而且該子系統提供了很多常用的 UNIX命令,包括 make GCC GDB 。那我們豈不是可以用這個 POSIX子系統 windows下開發 UNIX 環境程序了?恭喜你,答對啦!不過像 epoll 這樣的函數並沒有提供。該 POSIX子系統 應該只是提供了一個子集,方便開發人員來移植程序。

要了解更多關於 POSIX子系統 的介紹及安裝方法,請點擊這篇文章《初探Windows 7 POSIX 子系統》: http://soaspx.com/dotnet/service/service_20100426_3996.htm

安裝完成後,打開C:/Windows/SUA 目錄,裏面的文件夾名稱是不是很熟悉?這個子系統本身提供了開發工具 make GCC GDB ,包括一些頭文件(在 usr 目錄下)。另外,如果安裝有 Visual Studio ,並設置好了環境變量,在該子系統的 Cshell 中還可調用 VC 的命令行編譯選項來編譯程序!具體配置請參閱其幫助文檔的“ Porting applications to the Subsystem for UNIX-based Applications ”的“ Compatibility issues ”項。

另外,系統還提供了一個“Visual Studio  調試程序擴展”,可以在安裝有 Visual Studio 的機子上來調試 Unix 程序。不過要首先按上面的步驟在子系統中設置好 VS 環境變量,然後用 shell 命令生成 PDB 文件(該文件是 VS調試必須的 ),然後開始調試,步驟很麻煩,有興趣的可以看一下,具體的操作步驟在幫助文檔的“ Porting applications to the Subsystem for UNIX-based Applications -> Porting code -> Installing and Using the Microsoft Visual Studio Debugger Extension ”。

不過,想要用Visual Studio2008 來編譯程序(注意,僅僅是編譯!),則要修改幾個頭文件。將 C:/Windows/SUA/usr/include 目錄下的頭文件向你的 Visual Studio2008 的安裝目錄遷移。哪個不符合就遷移哪個。我試了一下,下面是我自己使用過程的小結:

1.  僅在C:/Windows/SUA/usr/include 存在的文件

對於這類文件,將C:/Windows/SUA/usr/include 目錄中的 strings.h features.h netdb.h unistd.h signal.h 及文件夾 sys netinet netinet6 arpa 添加 VS_DIR/VC/include 目錄下。這時可以編譯 socket 程序啦。

2.  C:/Windows/SUA/usr/include VS_DIR/VC/include 都存在的文件

這類文件,比如time.h ,爲了不影響 VC 寫的 windows 程序的正常使用,我採取的辦法是修改 SUA 中的文件包含。將 time.h 文件更名爲 timesua.h( 包括內部的預編譯頭! ) ,放在新增加的 VC/include/sys 目錄中。同時,修改 <sys/time.h> 中的第 9 #include<time.h> 爲: #include <sys/timesua.h> 即可。對於其它文件也可作類似處理,充分發揮你的想象力吧!

這樣更改後,就可以藉助Visual Studio2008 強大的功能來編寫 Unix 下的程序了,並且可以“編譯”來查找 語法錯誤 ,注意,僅僅是編譯,由於缺少動態連接庫,所以無法“連接”。

最後要說明的是,SUA C shell 默認使用的 GCC 版本是 3.3 ,不過 SUA 還提供了 4.2 版本的 GCC ,要在 C shell 中使用 4.2 版本的 GCC ,請修改 C:/Windows/SUA/etc/csh.login 文件中 62 行和 180 行對應版本號即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章