lyozg 2024-04-25 23:43 采纳率: 0%
浏览 1

编译gcc-6至Aarch64架构平台

我正处于 x86_64 平台 fedore39 操作系统准备将 gcc-6.3.0 进行交叉编译至 aarch64-linux 平台,我目前所使用的 toolchain 是 aarch64-linux-gnu-gcc (Linaro GCC 6.5-2018.12) 6.5.0, 我在 configure 阶段指定了 --with-build-sysroot 选项,并且设置了 C_INCLUDE_PATH 环境变量为我当前使用的 sysroot 目录路径,我通过 find 指令可以确认我的 sysroot/usr/include 下存在如图所示的头文件,但是在编译时仍然报错,我考虑过将缺失的头文件从 sysroot 中拷贝至编译目标所在目录,但对于每一个类似的报错都需要这么做,我认为这并不是最好的解决方案,请问各位是否遇到过类似的问题。

img

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 23:43
    关注

    引自免费微信小程序:皆我百晓生

    要解决这个问题,你需要确保在构建GCC时正确地设置了交叉编译环境。首先,你需要设置正确的工具链和sysroot。然后,检查配置选项和环境变量以确保它们指向正确的路径。

    以下是详细的步骤:

    1. 安装必要的依赖: 在x86_64平台上,确保已经安装了用于交叉编译所需的库和工具。例如,可能需要binutils-cross, gcc-cross-aarch64, pkg-config等。

    2. 设置环境变量: 设置CC, CXX, AR, AS, RANLIB等环境变量,以便指向你的aarch64工具链(比如aarch64-linux-gnu-gccaarch64-linux-gnu-c++等)。

    3. 运行configure: 使用以下命令启动GCC的配置过程,指定正确的交叉编译信息和sysroot路径:

      export CROSS_COMPILE=aarch64-linux-gnu-
      export CC=$CROSS_COMPILE$CC
      export CXX=$CROSS_COMPILE$CXX
      export AR=$CROSS_COMPILE$ar
      export AS=$CROSS_COMPILE$AS
      export RANLIB=$CROSS_COMPILE$RANLIB
      
      ./configure \
        --prefix=/path/to/install/directory \
        --target=aarch64-linux-gnu \
        --with-sysroot=/path/to/sysroot \
        --enable-bootstrap \
        --enable-languages=c,c++,fortran,objc,obj-c++,ada \
        --disable-multilib
      

      注意替换/path/to/install/directory/path/to/sysroot为你实际的安装目录和sysroot路径。

    4. 构建并安装: 接下来,执行make && make install进行构建和安装。

    5. 检查头文件路径: 如果上述步骤后仍有问题,检查stdc-predef.h文件是否存在。它通常位于sysroot的某个地方,例如/path/to/sysroot/usr/include/c++/version_number/。如果不在那里,请尝试手动复制到正确的位置,或者找到包含这个头文件的包并安装。

    6. 修复features.h: 另外,可能需要编辑bits/features.h,确保它能找到正确的stdc-predef.h。这可以通过在features.h文件中添加一个相对路径到正确的stdc-predef.h实现,例如:

      #ifndef _GLIBCXX_FEATURES_H
      #error "Never use <bits/features.h> directly; include <ciso646>, <cstdalign>, etc."
      #endif
      
      // ...其他内容...
      
      #include <../sysroot/usr/include/c++/version_number/stdc-predef.h>
      

      其中,version_number应该替换为你的C++标准库版本号,如67等。然后保存更改并重新编译。

    按照这些步骤操作,你应该能成功地在x86_64平台上交叉编译出针对aarch64的GCC。如果还有任何问题,请提供具体的错误消息,以便我能更准确地指导你。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月25日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大