鲲鹏架构入门与实战
上QQ阅读APP看书,第一时间看更新

第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节进行有针对性的分析。