我一直在尝试建立一个 clang 交叉编译器工具链,将 C/C++ 主机 x86-64-linux-gnu 编译为目标 arm-linux-gnueabihf。输出二进制文件旨在在具有armv7 cortex-53a CPU的树莓派3B+上运行。raspberry pi 操作系统相当于 Raspian 的 debian-buster,因此 apt 中的默认 clang 是 clang-7.0.1。
我希望能够完成一个 clang 交叉编译器,可以用
clang++ hello_world.cpp
Run Code Online (Sandbox Code Playgroud)
默认情况下,使用正确的 arm-linux-gnueabihf 包含和库路径进行编译和链接。对我而言,使用的链接器并不重要。
我首先按照https://solarianprogrammer.com/2019/05/04/clang-cross-compiler-for-raspberry-pi/和 TLDR 上的指南进行操作;它下载具有适当版本 (7.0.1) 的 llvm-project,使用 cmake 标志,使用 cmake 和 ninja 构建 LLVM、clang、compiler-rt、lld、libunwind 和 polly:
-DCMAKE_BUILD_TYPE=Release
-DLLVM_BUILD_DOCS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/cross_armhf_clang_7
-DCMAKE_CROSSCOMPILING=True -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf
-DLLVM_TARGET_ARCH=ARM
-DLLVM_TARGETS_TO_BUILD=ARM
Run Code Online (Sandbox Code Playgroud)
但是当尝试使用新构建的 clang 编译 libcxxabi 和 libcxx 时,它找不到正确的 libstdc++:
CMake Error at /usr/local/cross_armhf_clang_7/lib/cmake/llvm/CheckCompilerVersion.cmake:38 (message):
Host Clang must be able to find libstdc++4.8 or newer!
Call Stack (most recent call …Run Code Online (Sandbox Code Playgroud)