官术网_书友最值得收藏!

5.2.2 移植總結

對于C/C++為代表的編譯型語言來說,移植方法一般包括兩種,也就是源代碼修改和編譯選項修改,有時候使用其中一種方式,有時候兩種方式需要同時使用。

1.源代碼修改

對于源代碼修改的場景,主要分為以下幾種:

1)對內嵌的匯編指令的修改

正如在5.1節介紹的那樣,x86架構和鯤鵬在匯編指令上完全不同,對于在編譯型語言中內嵌的匯編指令,需要根據目標架構指令集的具體情況進行有針對性更改。

2)char數據類型的修改

使用5.2.1節介紹的方法,把char數據類型更改為signed char。

3)雙精度浮點型轉整型溢出處理的修改

詳細見5.2.3節內容。

2.編譯選項修改

1)char數據類型默認無符號

對于char數據類型默認無符號問題,除了上面介紹的直接更改代碼方法外,還可以使用修改編譯選項來解決,就是在編譯時指定-fsigned-char選項,這一點在5.2.1節也演示了。當然,如果是從鯤鵬架構移植到x86架構,可以使用-funsigned-char來保持char類型為無符號型。

2)指定編譯64位應用

在指定應用編譯為64位時,x86架構下需要指定編譯選項-m64,但是在鯤鵬架構下不支持這個選項,替代的選擇是-mabi=lp64。需要注意的是,不是所有的gcc版本都支持-mabi=lp64選項,只有在4.9.4及以后的版本才支持。

3)目標指令集

在執行編譯時,可以指定目標的指令集,使用的是-march編譯選項,該選項可以指定的指令集類型非常多,大概有幾十種,但是鯤鵬架構目前只對應一種類型,就是ARMv8-a,在編譯時可以指定編譯選項為-march=ARMv8-a。

4)編譯宏

gcc預先內置了各種宏定義,這些宏定義有一部分是和架構有關系的,同時,gcc也支持自定義宏,在代碼里,也可以通過宏來對不同的架構做區別處理,例如,同樣一段功能,通過宏定義的控制條件來區分不同架構下的實現方式,這樣在編譯時指定宏定義,就可以在同一個代碼文件下適配多種架構。

主站蜘蛛池模板: 乌兰察布市| 五大连池市| 文山县| 罗甸县| 长沙县| 新乡县| 海淀区| 高州市| 东乡族自治县| 扎囊县| 稷山县| 迭部县| 萍乡市| 邢台市| 自治县| 南漳县| 土默特左旗| 苗栗市| 怀化市| 兴化市| 连州市| 和林格尔县| 鱼台县| 东乌| 潜江市| 正镶白旗| 大名县| 宜昌市| 板桥市| 芜湖县| 安岳县| 社会| 宿州市| 尖扎县| 汶上县| 永靖县| 黑龙江省| 旬阳县| 从化市| 都安| 彩票|