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

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


除了修改外圍的各種頭文件之外,還不要忘了修改工程的編譯選項(xiàng),特別是預(yù)定義選項(xiàng) 。在Tar的移植過程就需要以下的預(yù)定義HAVE_CONFIG_H,_POSIX_SOURCE,MSDOS 。HAVE_CONFIG_H 表示程序編譯需要config.h文件 。為了方便期間,在tar移植過程中就放到工程的預(yù)編譯選項(xiàng)中了 。MSDOS,移植的是Linux下的控制臺程序,而Windows平臺最接近Linux控制臺就是DOS,特別是一些環(huán)境變量設(shè)置和全局常量的定義 。Tar的有些代碼針對MSDOS環(huán)境已經(jīng)做了一部分修正,這點(diǎn)在移植過程中可以利用起來 。還有一個(gè)可選項(xiàng)是__CYGWIN__ 。有些Linux程序會針對Cygwin平臺做出代碼上的特殊設(shè)定 。當(dāng)遇到這樣的代碼的時(shí)候,一定要加上__CYGWIN__預(yù)定義項(xiàng),能夠大大減少移植需要的工作量 。還有就是移植過程引入的各種Cygwin代碼中也可能需要__CYGWIN__定義(有時(shí)候是其他的定義,比如_POSIX_SOURCE,或者_(dá)_INSIDE_CYGWIN__) 。
經(jīng)過上述的幾個(gè)步驟 。第一個(gè)目標(biāo),代碼能夠編譯通過基本上是不會有什么問題的 。只要把握好二個(gè)修改代碼的基本原則,第一 。引入新的代碼,而不修改原有的代碼 。在沒有辦法進(jìn)行調(diào)試前修改源代碼是不允許的,修改的不好就會引起最后代碼運(yùn)行邏輯的混亂,而且在代碼能夠運(yùn)行之前是很難發(fā)現(xiàn)問題的 。所以除非非常有把握,否則不要修改被移植工程的源代碼 。第二,引入新的代碼之后,不能因?yàn)檫@次引入而需要再次引入新的代碼 。這樣子,就進(jìn)入死循環(huán)了 。為了解決某個(gè)數(shù)據(jù)類型的定義,而引入了新的不能解釋的數(shù)據(jù)類型 。這樣還不如不引入新的代碼 。所以引入新的代碼,特別是很多頭文件 。引入之前一定要做修改,只保留工程本身需要的部分,去除那些不需要的代碼 。直到能編譯通過為止 。三:第二個(gè)目標(biāo),使得代碼能夠鏈接過(Link)
完成了第一個(gè)目標(biāo)之后,就會有大量的link錯(cuò)誤 。原因是前面引入了很多外部函數(shù),外部全局常量只有定義而沒有實(shí)體,于是就會產(chǎn)生link錯(cuò)誤 ?,F(xiàn)在需要的是為代碼提供引入的函數(shù)實(shí)體,外部全局變量實(shí)體 。一般都是函數(shù)link(本文于2003年完成. 如需要轉(zhuǎn)載 請聯(lián)系jackforce at 163.com)不到的比較多 。
要解決link錯(cuò)誤就需要了解不同平臺上面函數(shù)操作的區(qū)別,特別是某些概念的區(qū)別 。這里最好的參考資料有兩個(gè) 。一個(gè)是Windows Services for UNIX (SFU)的幫助文件,一個(gè)是MSDN中的一篇文章《UNIX Application Migration Guide》 。SFU是微軟提供一個(gè)Unix兼容環(huán)境,有點(diǎn)像Cygwin 。在安裝上SFU之后有一個(gè)幫助文件 。其中有一部分就是Unix,Linux函數(shù)的說明,有些函數(shù)提供了信息說明可以用Windows Library中那些函數(shù)來替代 。這點(diǎn)對于移植是很重要的(省事) 。UNIX Application Migration Guide應(yīng)該不算文章而是有點(diǎn)像書了 。它說明了很多windows和Unix系統(tǒng)(類Unix系統(tǒng))中很多概念不同之處,針對這些不同的概念提供了很多相關(guān)的信息來說明如何進(jìn)行模擬這些不同之處 。比如Unix系統(tǒng)中Signals概念可以使用Windows環(huán)境中的Event來替代 。SIGALRM用Windows Message來替代等 。
SFU的幫助文件提供了一部分信息來說明Windows平臺中哪些低階函數(shù)(C 函數(shù)庫)可以替代相關(guān)Unix函數(shù) ?!禪NIX Application Migration Guide》則提供了一種方法來轉(zhuǎn)換Unix平臺上的一些OS級的概念到windows上 。實(shí)際上Cygwin下面也做了很多這樣的轉(zhuǎn)換 。具體解決link問題的時(shí)候可以參考Cygwin本身的實(shí)現(xiàn) 。
不過有些概念,比如安全權(quán)限方面的概念 。在Linux平臺和windows平臺上面是完全不能互換的 。而且windows平臺中的權(quán)限函數(shù)操作(本文于2003年完成. 如需要轉(zhuǎn)載 請聯(lián)系jackforce@163.com)的過于復(fù)雜 。這樣對于某些linux函數(shù) 。比如getuid處理可以參考Cygwin的處理辦法 。什么也不做直接返回0 (return 0) 。當(dāng)代碼中遇到這些函數(shù)的時(shí)候可以從Cygwin的代碼中復(fù)制一個(gè)getuid出來 。放入工程中去 。

推薦閱讀