日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

將Linux代碼移植到Windows的簡單方法

一.前言
Linux擁有豐富各種源代碼資源,但是大部分代碼在Windows平臺情況是無法正常編譯的 。Windows平臺根本無法直接利用這些源代碼資源 。如果想要使用完整的代碼,就要做移植工作 。因為C/CLibrary的不同和其他的一些原因,移植C/C代碼是一項困難的工作 。本文將以一個實際的例子(Tar)來說明如何把Linux代碼移植到Windows平臺上 。移植過程將盡量少修改代碼,以便代碼的運(yùn)行邏輯不會發(fā)生任何變動 。保留絕大部分軟件主要功能 。
二.準(zhǔn)備工作
Tar是Linux平臺下面一個打包工具 。移植這樣一個程序到windows平臺需要做那些工作呢?
首先是一些準(zhǔn)備工作,在Windows平臺上面安裝上Cygwin的最新版本,在Cygwin中安裝好GCC等開發(fā)工具 。同樣也需要一個Windows開發(fā)環(huán)境 。可以使用最新版本Visual Studio, Microsoft Visual Studio .NET 2003 。從www.gnu.org上取得Tar的最新源代碼,版本是1.13 。在Cygwin下面解開tar-1.13.tar.gz.源代碼包 。注意請不要在Windows下面使用WINRAR或者WINZIP來解壓縮 。WINRAR和WINZIP在解壓縮某些tar.gz包的時候會有問題 。使得解包之后的目錄和文件出現(xiàn)異常 。如果是源代碼包將有可能不能在Cygwin下面正確編譯 。解開壓縮包之后,進(jìn)入 tar-1.13目錄,在當(dāng)前的目錄下面輸入
./configure
命令,運(yùn)行完畢之后,再次輸入
make
命令 。開始編譯tar的Cygwin版本 。
編譯基本上不會有問題,進(jìn)入src目錄,可以看到新編譯好的Tar程序tar.exe 。
Cygwin是一個API層的Linux模擬環(huán)境 。如果能夠在Cygwin下面編譯,運(yùn)行 。實際上也就是能在Windows下面編譯和運(yùn)行,只是需要有一層中間API模擬某些Linux特有的操作 。簡單的判斷一個Linux程序能不能移植到Windows平臺下面,就是看是否能在Cygwin下面編譯源代碼,并運(yùn)行程序 。
在Cygwin中編譯Tar的源代碼,判斷能否移植只是其中一個原因 。另外一個原因是移植代碼過程中需要一個特殊的頭文件config.h 。config.h是移植過程中最重要的源代碼文件 。Config.h文件并不是源代碼本身的一部分 。文件是在Cygwin下面運(yùn)行”./configure”命令時生成的 。在Cygwin下運(yùn)行”./Configure”命令時,會根據(jù)Cygwin平臺開發(fā)環(huán)境生成config.h文件 。編譯時也需要config.h文件對代碼編譯項進(jìn)行控制 。移植工作也以config.h文件為基礎(chǔ) 。
接下來就是構(gòu)造Windows工程 。先用Visual Studio .NET 2003創(chuàng)建一個空的工程(Project),命名為WinTar 。根據(jù)Cygwin中的編譯輸出信息,Tar主要的代碼在Src和lib兩個目錄中 。把這兩個目錄復(fù)制到新工程里,并把代碼加入到工程中 。然后復(fù)制Config.h到WinTar工程目錄下面 。
準(zhǔn)備工作基本上完成了,接著就是移植 。移植過程可以分為3個部分 。
三.第一個目標(biāo):使得WinTar能編譯過(Compiler)
第一個目標(biāo)的完成主要圍繞Config.h來實現(xiàn) 。Linux下開發(fā)環(huán)境和Windows開發(fā)環(huán)境很大的不同是C Library頭文件和各種類型的定義不同 。而Config.h提供了完整編譯開關(guān)來處理因為不同平臺間開發(fā)環(huán)境不同帶來的不同之處 ?,F(xiàn)在需要手工去修改這個文件,以便Tar源代碼能適應(yīng)Windows平臺 。
首先調(diào)整各種C Library頭文件(Header File)的包含問題 。在Config.h中定義了很多類似HAVE_XXXX_H 。比如定義HAVE_CONFIG_H為1表示工程中可以使用config.h 。
#define HAVE_MALLOC_H 1表示可以在工程中使用Malloc.h頭文件 。通過調(diào)整這些定義值,可以去除一些Windows平臺下面沒有的頭文件包含 。也許其他地方還有很多頭文件包含關(guān)系需要處理,但是這里的定義基本上解決了大部分的頭文件包含問題 。
/* Define if you have the header file. */
/* #undef HAVE_LINUX_FD_H */

推薦閱讀