当前位置 - 股票行情交易網 - 財經資訊 - 開發中,在linux下的遊戲軟件 移植到windows需要做哪些處理 求詳細

開發中,在linux下的遊戲軟件 移植到windows需要做哪些處理 求詳細

Tar是Linux平臺下面壹個打包工具。移植這樣壹個程序到windows平臺需要做那些工作呢?

首先是壹些準備工作,在Windows平臺上面安裝上Cygwin的最新版本,在Cygwin中安裝好GCC等開發工具。 同樣也需要壹個Windows開發環境。可以使用最新版本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包的時候會有問題。使得解包之後的目錄和文件出現異常。如果是源代碼包將有可能不能在Cygwin下面正確編譯。解開壓縮包之後,進入 tar-1.13目錄,在當前的目錄下面輸入

./configure

命令,運行完畢之後,再次輸入

make

命令。開始編譯tar的Cygwin版本。

編譯基本上不會有問題,進入src目錄,可以看到新編譯好的Tar程序tar.exe。

Cygwin是壹個API層的Linux模擬環境。如果能夠在Cygwin下面編譯,運行。實際上也就是能在Windows下面編譯和運行,只是需要有壹層中間API模擬某些Linux特有的操作。簡單的判斷壹個Linux程序能不能移植到Windows平臺下面,就是看是否能在Cygwin下面編譯源代碼,並運行程序。

在Cygwin中編譯Tar的源代碼,判斷能否移植只是其中壹個原因。另外壹個原因是移植代碼過程中需要壹個特殊的頭文件config.h。config.h是移植過程中最重要的源代碼文件。Config.h文件並不是源代碼本身的壹部分。文件是在Cygwin下面運行”./configure”命令時生成的。在Cygwin下運行”./Configure”命令時,會根據Cygwin平臺開發環境生成config.h文件。編譯時也需要config.h文件對代碼編譯項進行控制。移植工作也以config.h文件為基礎。

接下來就是構造Windows工程。先用Visual Studio .NET 2003創建壹個空的工程(Project),命名為WinTar。根據Cygwin中的編譯輸出信息,Tar主要的代碼在Src和lib兩個目錄中。把這兩個目錄復制到新工程裏,並把代碼加入到工程中。然後復制Config.h到WinTar工程目錄下面。

準備工作基本上完成了,接著就是移植。移植過程可以分為3個部分。

三.第壹個目標:使得WinTar能編譯過(Compiler)

第壹個目標的完成主要圍繞Config.h來實現。Linux下開發環境和Windows開發環境很大的不同是C Library頭文件和各種類型的定義不同。而Config.h提供了完整編譯開關來處理因為不同平臺間開發環境不同帶來的不同之處。現在需要手工去修改這個文件,以便Tar源代碼能適應Windows平臺。

首先調整各種C Library頭文件(Header File)的包含問題。在Config.h中定義了很多類似HAVE_XXXX_H。比如定義HAVE_CONFIG_H為1表示工程中可以使用config.h。

#define HAVE_MALLOC_H 1表示可以在工程中使用Malloc.h頭文件。通過調整這些定義值,可以去除壹些Windows平臺下面沒有的頭文件包含。也許其他地方還有很多頭文件包含關系需要處理,但是這裏的定義基本上解決了大部分的頭文件包含問題。

/* Define if you have the <linux/fd.h> header file. */

/* #undef HAVE_LINUX_FD_H */

/* Define if you have the <locale.h> header file. */

#define HAVE_LOCALE_H 1

/* Define if you have the <malloc.h> header file. */

#define HAVE_MALLOC_H 1

/* Define if you have the <memory.h> header file. */

#define HAVE_MEMORY_H 1

/* Define if you have the <ndir.h> header file. */

/* #undef HAVE_NDIR_H */

第二步,調整各種數據類型的定義,可能在linux下面會有很多特殊的數據類型定義,Config.h文件中也包含了壹部分可以變動的數據類型定義項。這些定義壹般都是基本數據類型的重定義。可以根據Windows平臺下的數據類型定義情況進行修補。比如在Cygwin的開發環境中有個數據類型mode_t, Visual Studio的C Library中卻(作者 很土,聯系方法 jackforce at 163 dot com)找不到這樣數據類型。Tar代碼中使用了大量的mode_t數據類型. config.h中提供了修改項來讓開發人員自己修改mode_t的定義,並提示如果mode_t在<sys/types.h>中沒有定義的話,可以把他定義為int型。所以在config.h加上#define mode_t int。這樣mode_t沒有定義的問題就解決了。其他的數據類型也是同樣對待處理。