我正在尝试在 Ubuntu 上使用 clang 交叉编译到 AArch64。我已经安装了正确的软件包,并且能够使用预打包的 clang 成功编译,但对自行构建的版本执行相同的操作会导致缺少头文件或库的错误。例如:
simulator/fileoutscalarmgr.cc:22:10: fatal error: 'fstream' file not found
22 | #include <fstream>
我可以通过手动指定包含路径来修复这些问题(我不必使用预先打包的 clang 来执行此操作),但编译在链接时仍然失败,这是我无法修复的。
设置
clang -v
和 --sysroot=/usr/aarch64-linux-gnu
时 --target=aarch64-linux-gnu
的输出与预打包和自建 clang 版本不匹配。预打包能够自动找到所有内容:
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/12
Selected GCC installation: /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
虽然从源代码构建的无法找到交叉编译器库(使用-v时没有匹配的输出)。
如何从源代码构建 clang 来查找这些库?
--sysroot=/usr/aarch64-linux-gnu
会导致从源构建的 clang 起作用。仅使用
--target=aarch64-linux-gnu
时效果很好。但出于某种原因,预打包仍然可以与 sysroot
设置一起使用。