![鲲鹏架构入门与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/964/44509964/b_44509964.jpg)
第5章 鲲鹏应用迁移
5.1 应用迁移的原因
5.1.1 不同架构下程序执行对比
通过一个简单的C程序,演示一下在不同架构下编译运行的对比,要对比的环境如表5-1所示。
表5-1 运行环境对比
![](https://epubservercos.yuewen.com/8D53C8/23721640301031506/epubprivate/OEBPS/Images/Figure-T68_34131.jpg?sign=1739618146-xUWl0e2gWVEyWbJY4KS8d2HxLiHqR3Ny-0-39a4571df201143ba6e0e7a30e208aa3)
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键进入编辑模式,输入代码,然后保存并退出,代码如下:
![](https://epubservercos.yuewen.com/8D53C8/23721640301031506/epubprivate/OEBPS/Images/Figure-P69_9641.jpg?sign=1739618146-dD06CCyqeqq7Jx6bozgY2rMBrj9A9FS8-0-519dad3c24906231e1ec1c9edb113fac)
步骤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键进入编辑模式,输入代码,然后保存并退出,代码如下:
![](https://epubservercos.yuewen.com/8D53C8/23721640301031506/epubprivate/OEBPS/Images/Figure-P69_9687.jpg?sign=1739618146-HD27uijG1mSMqdu07d21ugAC9y6GR9MC-0-b57371abfcd83a3a3381872031dcf9af)
步骤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所示。
![](https://epubservercos.yuewen.com/8D53C8/23721640301031506/epubprivate/OEBPS/Images/Figure-P70_9741.jpg?sign=1739618146-4AcAOh5qWplylemxy4n0Y81SjN2AubfN-0-0fe566056ff85b4c35e75eb1c2e9604e)
图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所示。
![](https://epubservercos.yuewen.com/8D53C8/23721640301031506/epubprivate/OEBPS/Images/Figure-P70_9767.jpg?sign=1739618146-9icfR55xx9bBEu4lpufAPZle4AM61inV-0-84896b69d33104868b8bec9d6f179cca)
图5-2 x86架构运行鲲鹏程序
根据上面的4个小实验,可以得出这样的结论,x86架构下编译的C程序无法在鲲鹏架构下直接运行;同样,鲲鹏架构下编译的C程序也无法在x86架构下运行。为什么会这样呢?在5.1.2节进行有针对性的分析。