第5章 鯤鵬應用遷移
5.1 應用遷移的原因
5.1.1 不同架構下程序執行對比
通過一個簡單的C程序,演示一下在不同架構下編譯運行的對比,要對比的環境如表5-1所示。
表5-1 運行環境對比

1.方式1
步驟1:準備好x86架構的運行環境,安裝CentOS操作系統,并且安裝好標準C開發環境,具體的步驟可以參考4.2節準備軟件環境的內容,注意CPU架構選擇x86架構。
步驟2:創建/data/code/文件夾,然后創建x86_demo.c,命令如下:
mkdir /data/code/ cd /data/code/ vim x86_demo.c
步驟3:按i鍵進入編輯模式,輸入代碼,然后保存并退出,代碼如下:

步驟4:編譯x86_demo.c,生成編譯后的文件x86_demo,命令如下:
gcc -g -o x86_demo x86_demo.
注意:這里使用了gcc的-g選項,使用該選項在編譯時會額外執行如下的操作:
(1)創建符號表,符號表包含了程序中使用的變量名稱的列表。
(2)關閉所有的優化機制,以便程序執行過程中嚴格按照原來的C代碼進行。
這樣,在后續的反編譯的時候,可以用匯編代碼和C源代碼進行對比,便于理解匯編后的代碼。
步驟5:運行x86_demo,命令如下:
./x86_demo
因為這個演示程序沒有輸出,所以運行x86_demo也沒有回顯。
2.方式2
步驟1:準備鯤鵬架構的C開發環境,參考4.2節準備軟件環境的內容。
步驟2:創建/data/code/文件夾,然后創建kunpeng_demo.c,命令如下:
mkdir /data/code/ cd /data/code/ vim kunpeng_demo.c
步驟3:按i鍵進入編輯模式,輸入代碼,然后保存并退出,代碼如下:

步驟4:編譯kunpeng_demo.c,生成編譯后的文件kunpeng_demo,命令如下:
aarch64 - redhat - Linux - gcc -g -o kunpeng_demo kunpeng_demo.c
步驟5:運行kunpeng_demo,命令如下:
./kunpeng_demo
同樣沒有回顯。
3.方式3
步驟1:登錄鯤鵬架構服務器
步驟2:從x86服務器復制編譯好的x86_demo到本地,命令如下:
scp root@192.168.0.208:/data/code/x86_demo /data/code/
需要根據服務器的實際情況修改x86服務器的用戶名和IP。
步驟3:運行x86_demo,命令如下:
./x86_demo
系統會提示無法運行該文件,如圖5-1所示。

圖5-1 鯤鵬架構運行x86程序
4.方式4
步驟1:登錄x86架構服務器
步驟2:從鯤鵬服務器復制編譯好的kunpeng_demo到本地,命令如下:
scp root@192.168.0.133:/data/code/kunpeng_demo /data/code/
需要根據實際情況修改Kunpeng服務器的用戶名和IP。
步驟3:運行kunpeng_demo,命令如下:
./kunpeng_demo
系統會提示無法運行該文件,如圖5-2所示。

圖5-2 x86架構運行鯤鵬程序
根據上面的4個小實驗,可以得出這樣的結論,x86架構下編譯的C程序無法在鯤鵬架構下直接運行;同樣,鯤鵬架構下編譯的C程序也無法在x86架構下運行。為什么會這樣呢?在5.1.2節進行有針對性的分析。