clang交叉编译命令找不到头文件

时间:2019-12-06 07:53:32

标签: c++ compilation clang

我正在尝试使用clang 10.0和official tutorial以及选项--target=<triple>进行简单的交叉编译。

我的环境位于 64位ubuntu16.04 clang10.0 上。

我的源文件只是a.cpp文件:

#include <iostream>

int main() {
  std::cout << "hello world" << std::endl;
  return 0;
}

如果我用clang++ --target=x86_64-unknown-linux-gnu a.cpp编译主机的源代码,则它运行良好。但是,如果我将clang++ --target=i386-unknown-linux-gnu a.cpp用于32位计算机或clang++ --target=arm-unknown-linux-eabi a.cpp,则会出现相同的错误:

a.cpp:18:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.

我的问题是:

1)我的编译命令是否错误?

2)主机应如何准备与其他目标计算机的交叉编译?

任何答案将不胜感激!

1 个答案:

答案 0 :(得分:0)

除编译器外,您还需要sysroot(其中存在所有头文件和运行时库)才能成功编译。如果编译器找不到sysroot的路径,则它将不知道在哪里可以找到标准库头等。

如果您的系统没有i386工具链,则需要下载具有sysroot的编译器工具链。例如从这里开始:https://github.com/nativeos/i386-elf-toolchain/releases

clang++ --target=i386-unknown-linux-gnu --sysroot /path/to/sysroot a.cpp

类似地,您可以从以下网址下载工具链:https://launchpad.net/gcc-arm-embedded/+download

要了解有关工具链和sysroot的更多信息,请阅读:https://elinux.org/Toolchains