本文档适用于安装各类交叉编译工具,arm32,arm64,riscv64等架构芯片的交叉编译平台
下载交叉编译工具链
bootlin官网
Cross-compilation toolchains for Linux - Home (bootlin.com)
如图所示,进入上面提供的网址,根据开发板配置选择交叉编译器下载
若是其它芯片,可以根据芯片的架构选择对应的交叉编译平台
将下载的文件复制到Ubuntu中
将交叉编译工具链解压到/opt目录下:
tar -zxvf toolchain_file.tar.gz -C /opt
然后配置环境变量,打开 ~/.bashrc
gedit ~/.bashrc
添加下行到末尾
export PATH=/opt/toolchain_bin_directory/bin:$PATH
toolchain_bin_directory是你解压工具链后所得到的文件夹名称
export PATH=/opt/riscv64-lp64d--glibc--stable-2022.08-1/bin:$PATH
保存关闭文件后,重新使环境变量生效
source ~/.bashrc
使用交叉编译工具链,编译程序
riscv64-linux-gcc hello.c -o hello
再将编译好的程序复制到开发板下,运行
chmod 777 hello
./hello
运行后,报错,库版本兼容问题
该问题源于程序本身直接依赖的库没有问题,但是在迁移到其他机器时,间接依赖的库版本不兼容
通过查阅资料后,问题如下:
在开发板上运行编译后的程序时遇到了一个 GLIBC_2.34 版本不匹配的错误。这是因为你的开发板上的 glibc(GNU C Library)版本较低,不满足程序所需的最低版本要求。
解决措施:
1、升级 glibc:可以尝试在开发板上升级 glibc 版本,以满足程序对 GLIBC_2.34 的要求。
然而,这可能需要更改整个操作系统的 glibc 版本,可能会引入其他潜在的兼容性问题。在进行此操作之前,请确保你了解其潜在风险,并备份重要数据。
2、静态链接 glibc:另一种方法是静态链接 glibc 库,以便将其包含在你的可执行文件中。这样,你的程序将不再依赖于特定版本的 glibc。在编译时,你可以在链接阶段使用
-static选项来进行静态链接。
riscv64-linux-gcc -static -o hello hello.c
这将生成一个静态链接的可执行文件hello,其中包含了 glibc 的所有依赖项。
重新编译运行结果
chmod 777 hello
./hello