什么是交叉编译
交叉编译是指在一个平台上生成可以在另一个平台上执行的代码。由于不同的体系结构有不同的指令系统。因此,不同的cpu需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同的cpu的对应的可执行的二进制文件。
交叉编译链安装
建立交叉编译环境又可分为安装SDK(其中包含了交叉编译工具链)和设置交叉编译环境变量。
SDK路径:EF1开发板资料包/06-常用工具/06-1 编译工具安装脚本/fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh
将上述资料拷贝到ubuntu系统的/home/elf目录下。
并在该目录下执行:
elf@ubuntu:~$ sudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh |
命令行会提示:Enter target directory for SDK (default: /opt/fsl-imx-x11/4.1.15-2.0.0)
连续两次按下回车键,程序将会自动安装交叉编译工具链(交叉编译工具链安装一次即可,更换终端或重启系统不必重新安装)。安装过程中一定要保证网络畅通,Ubuntu系统可以访问外网。
等待SDK安装,如下图通过打印信息可以看出安装成功。
交叉编译链使用
设置环境变量
注意:
- 设置环境变量之后,只要不更换终端,下次再编译就不需要重新设置。
- 如果重新打开新终端或者切换账户,编译前需要重新设置环境变量。
设置编译环境主要是指定目标架构和交叉编译工具链,以及编译过程中使用到的一些库的路径等,使用如下命令配置(.后边有空格):
. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi |
然后使用命令arm-poky-linux-gnueabi-gcc -v判断是否设置成功(注:-v前边有空格)。正常情况下会打印出gcc的版本信息:gcc version 5.3.0 (GCC),
编译helloworld
在讲“GCC编译器”章节,使用ubuntu的GCC编译器编译生成了hello_ubuntu程序,在此章节,将使用安装的开发板的交叉编译器编译同一个hello.c文件,生成hello_board程序,使用file文件可以看出两个交叉编译器的不同。
注意:执行环境变量后,交叉编译工具重命名为CC,在编译程序时需要用$CC。