参考:www.cnblogs.com/Liuyaaa/p/1…
官方交叉编译说明文档 : clang.llvm.org/docs/CrossC…
查看当前安装的clang是否支持目标架构
下载交叉编译工具链
到linaro下载交叉编译工具链:
www.linaro.org/downloads
snapshots.linaro.org/gnu-toolcha…
有三个包:
其中:
gcc-linaro: 是交叉编译工具链;runtime-gcc-linaro: 是运行时依赖的库,构建跟文件系统的时候需要;sysroot-glib-linaro: 是交叉编译时需要的头文件以及库文件;
其中
gcc-linaro解压后目录中也包含一个sysroot:aarch64-linux-gnu.
也可以到ARM官网下载交叉编译工具链:
developer.arm.com/downloads/-…
下载gcc-linaro并解压。
使用LLVM交叉编译ARM64的可执行程序
clang -v \ # -v 展示verbose日志,方便排错
--target=aarch64-linux-gnu \ # 三元组指定目标架构
--gcc-toolchain=./gcc-linaro-14.0.0-2023.06-x86_64_aarch64-linux-gnu \
--sysroot=./gcc-linaro-14.0.0-2023.06-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc \
-fuse-ld=lld \ # 使用lld作为链接器
hello.c -o hello
注意
sysroot的路径,不是缺头文件就是缺库,或者缺crtbeginS.o,找了半天才摸索出来。
将编译好的可执行程序拷贝到构造好的文件系统中:
mount -t ext4 -o loop ./buildroot-2024.11-rc3/output/images/rootfs.ext4 ./rootfs
sudo cp ./hello ./rootfs/root
启动虚拟机进行测试:
使用LLVM交叉编译ARM64的Linux Kernel
参见我的另一篇文章:使用LLVM交叉编译aarch64架构Linux Kernel的一些细节 - 知乎 (zhihu.com)
内核文档 : docs.kernel.org/kbuild/llvm…
make ARCH=arm64 O=build LLVM=1 defconfig
make ARCH=arm64 O=build LLVM=1 -j$(nproc)
关于这个特性的讨论以及修改内容可以看看:github.com/ClangBuiltL…