gcc 使用clang-11交叉编译x86-64上的aarch 64-linux-gnu错误:未找到“bits/c++ config. h”文件

k2fxgqgv  于 2023-01-13  发布在  Linux
关注(0)|答案(1)|浏览(1133)

我正在尝试使用clang-11将一个c++文件从我的主机x86 - 64交叉编译到aarch-linux-gnu。
命令如下:clang-11 -v -target aarch64-linux-gnu -B/usr/aarch64-linux-gnu/lib -march=armv8.5-a+memtag -fsanitize=memtag test_mte.cpp -static
但是,我遇到了这个错误:
In file included from /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/8/../../../../include/c++/8/stdlib.h:36: /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/8/../../../../include/c++/8/cstdlib:41:10: fatal error: 'bits/c++config.h' file not found #include <bits/c++config.h>
我已经安装了软件包gcc-multilib g++-multilib binutils-aarch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross crossbuild-essential-arm64 gcc-aarch64-linux-gnu
如何解决此错误?

    • 完整输出:**以下是clang-11命令的完整输出:

'Debian clang版本11.0.1 - 2~bpo10 + 1
目标:aarch64-未知-Linux-GNU
螺纹型号:posix安装目录:/usr/文件夹
找到候选GCC安装:/usr/bin/../lib/gcc交叉文件/aarch64-Linux-gnu/8
找到候选GCC安装:文件/usr/lib/gcc-交叉文件/aarch64-linux-gnu/8
选定的GCC安装:/usr/bin/../lib/gcc交叉文件/aarch64-Linux-gnu/8
候选多库:. ;@m64
选定的多库:. ;@m64
"/usr/lib/llvm-11/bin/clang "-cc1-三重aarch64-未知-linux-gnu-emit-obj-mrelax-all-disable-free-disable-llvm-验证器-丢弃值-名称-主文件-名称test_mte. cpp-静态-定义-重定位模型静态-mbrame-指针=非叶-fmath-errno-fno-舍入-数学-mconstructor-别名-目标-cpu通用-目标-特性+neon-目标-特性+v8.5a-目标-特性+mte-target-abi aapcs-fallow-half-argum输入和返回-fno-split-dwarf内联调试器调整= gdb-v-资源目录/usr/lib/llvm-11/lib/clang/11.0.1-内部系统/usr/bi n/../lib/gcc交叉/aarch64-linux-gnu/8/../../../../include/c ++/8-内部系统/usr/bin/../lib/gcc交叉/aarch64-linux-gnu/8/../../../include/aarch64-linux-gnu/c ++/8-内部系统/usr/bin/../lib/gcc-交叉/aarch64-linux-gnu/8/../../../../include/aarch64-linux-gnu/c ++/8-内部系统/usr/bin/../lib/gcc-交叉/aarch64-linux-gnu/8/../../../../include/c /8/向后-内部系统/usr/本地/包含-在内部系统/usr/lib/llvm-11/lib/clang/11.0.1/include-内部外部系统/include-内部外部系统/usr/include-fdeprecated-宏-fdebug-编译-目录/home/aditi712/mte_Stuff-错误限制19-fsanitize =内存标记-fno-已签名-char-fgnuc.version = 4.2.1-fcxx-排除-fexceptions-fcolor-诊断-faddrsig-o/tmp/测试_mte-836487.o-x c测试_mte. cpp
clang-cc1版本11.0.1基于LLVM 11.0.1默认目标x86_64-pc-linux-gnu
忽略不存在的目录"/usr/bin/../lib/gcc交叉/aarch64-linux-gnu/8/../../../../包含/aarch64-linux-gnu/c ++/8 "
忽略不存在的目录"/usr/bin/../lib/gcc交叉/aarch64-linux-gnu/8/../../../../包含/aarch64-linux-gnu/c ++/8 "
忽略不存在的目录"/include "

include "..."搜索从此处开始:

include搜索从此处开始:<...> search starts here:

/usr/bin/../lib/gcc交叉文件/aarch64-linux-gnu/8/../../../包含/c ++/8
/usr/bin/../lib/gcc交叉/aarch64-linux-gnu/8/../../../../包含/c ++/8/向后
/usr/本地/包含
/usr/库/llvm-11/库/语言/11.0.1/包含
/usr/包含
搜索列表结束。在test_mte. cpp:7包含的文件中:
在/usr/bin/../lib/gcc-cross/aarch64-linux-gnu/8/../../../include/c ++/8/标准数据库. h:36包含的文件中:
/usr/bin/../lib/gcc交叉文件/aarch64-linux-gnu/8/../../../包含/c ++/8/cstdlib:41:10:致命错误:未找到"bits/c ++ config. h"文件

包含〈位/c ++配置. h〉'

0pizxfdo

0pizxfdo1#

在我看来,clang似乎是在向一些gcc询问系统包含路径,而这个过程失败了(出于某种原因),导致包含了主机头。
以下是帮助我的解决方案:https://askubuntu.com/questions/947954/wrong-default-include-directories-for-clang-cross-compile
基本上你可以自己提供所有的系统包含。在我们的例子(arm64)中,对我来说,这可以归结为这些标志:

-nostdinc++ 
-cxx-isystem /usr/aarch64-linux-gnu/include/c++/10/`
-cxx-isystem /usr/aarch64-linux-gnu/include/c++/10/aarch64-linux-gnu/
-isystem /usr/aarch64-linux-gnu/include

相关问题