歇菜了一年多,猴子小编回归了!
看过猴子小编其他原创文章的都知道,全文干货,保姆级教程!
如何在Linux中使用交叉编译器 aarch-linux-gnu
第一步:下载安装交叉编译器
从gitcode下载交叉编译器(aarch-linux-gnu)猴子小编已经为猴友编译好可执行文件等libs可以直接使用
SSH方式:
git clone git@gitcode.com:xioayu/aarch64-linux-gnu.git
HTTPS方式
git clone https://gitcode.com/xioayu/aarch64-linux-gnu.git
将aarch64-linux-gnu放到linux 某路径下,猴子小编直接放在了 /opt 目录下,如下图:
第二步:配置aarch64-linux-gnu的编译环境
猴子小编直接写好了shell脚本供猴友使用
#!/bin/bash
T_PATH=/opt/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
C_PATH=${T_PATH}/libexec/gcc/aarch64-linux-gnu/7.5.0
export PATH=${T_PATH}/bin:${C_PATH}:$PATH
export CC=${T_PATH}/bin/aarch64-linux-gnu-gcc
export CXX=${T_PATH}/bin/aarch64-linux-gnu-g++
export AS=${T_PATH}/bin/aarch64-linux-gnu-as
export AR=${T_PATH}/bin/aarch64-linux-gnu-ar
export RANLIB=${T_PATH}/bin/aarch64-linux-gnu-ranlib
export STRIP=${T_PATH}/bin/aarch64-linux-gnu-strip
export CROSS_COMPILE=${T_PATH}/bin/aarch64-linux-gnu-
编译环境配置脚本(aarch64-linux-toolchain.sh)如图:
第三步:编写测试案例:
#include <iostream>
int main(int argc, char** argv)
{
std::cout << "hello aarch64-linux tool-chain" << std::endl;
return 0;
}
第四步:使用aarch64-linux-gnu编译测试案例
执行脚本 aarch64-linux-toolchain.sh 导出环境变量:
source aarch64-linux-gnu.sh
查看 环境变量是否设置成功:
开始编译测试案例: 咦,出错了,噗噗
解释: 由于 as 链接的是 /bin/x86_64-linux-gnu-as* 而 x86_64-linux-gnu-as* 就没有 '-EL' 编译选项,
需要重新给 as 进行软链接到 aarch64-linux-gnu-as, 如图见真相:
现在可以顺利编译了, 如图:
$CXX hello.cpp -o hello
成功编译出可执行文件,但这个可执行文件是没法跑在 x86 cpu的,可以使用file查看 可执行文件的架构依赖库等信息, 如图:
可以看到是关于 arm64架构的
第五步:拷贝到开发板并运行测试案例
到此还没有结束,拷贝到开发板上运行还会直接报错,请看:
是不是很疑惑? 可执行文件 hello 明明就在当前目录下,为啥还报错 hello文件不存在?
问题就在于: 需要依赖 /lib/ld-linux-aarch64.so.1
解决: 找到 ld-linux-aarch64.so.1 所在的位置,拷贝到开发板 /lib 目录
aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/ld-linux-aarch64.so.1
现在就可以成功的运行 测试案例 'hello' , 如图:
到此,交叉编译器 aarch64-linux-gnu 测试成功,学费了嘛
猴子小编创作不易,点个关注再走呗