gcc交叉编译失败

gcc交叉编译失败

我正在尝试为 ARM 构建交叉编译 gcc。这将更新现有的 gcc ARM 交叉编译器。构建运行良好,直到 libgcc1 成功构建后开始构建 libstdc++。

错误是:

<gcc-object-path>/./gcc/xgcc -shared-libgcc -B<gcc-object-path>/./gcc -nostdinc++ -L<gcc-object-path>/<target>/libstdc++-v3/src -L<gcc-object-path>/<target>/libstdc++-v3/src/.libs -L<gcc-object-path>/<target>/libstdc++-v3/libsupc++/.libs -B<sysroot>/<target>/bin/ -B<sysroot>/<target>/lib/ -isystem <sysroot>/<target>/include -isystem <sysroot>/<target>/sys-include --sysroot=<boot-strap-xgcc-sysroot>   -x c++-header -nostdinc++ -g -Os  -I<gcc-object-path>/<target>/libstdc++-v3/include/<target> -I<gcc-object-path>/<target>/libstdc++-v3/include -I<gcc-source-path>/libstdc++-v3/libsupc++ -O2 -g -std=gnu++0x <gcc-source-path>/libstdc++-v3/include/precompiled/stdc++.h \
        -o <target>/bits/stdc++.h.gch/O2ggnu++0x.gch
<gcc-source-path>/libstdc++-v3/include/precompiled/stdc++.h:52:20: fatal error: ccomplex: No such file or directory
 #include <ccomplex>
                    ^
compilation terminated.

find gcc-object-path -name ccomplex -print 显示:

<gcc-object-path>/<target>/libstdc++-v3/include/tr1/ccomplex
<gcc-object-path>/<target>/libstdc++-v3/include/ccomplex

编译命令有

-I<gcc-object-path>/<target>/libstdc++-v3/include

在上面。

<gcc-object-path>/<target>/libstdc++-v3/include/ccommon

是一个符号链接

<gcc-source-path>/libstdc++-v3/include/c_std/ccomplex

但该文件在该位置的源代码中不存在,因此它是一个损坏的符号链接,编译失败。不过,文件 ccomplex 确实存在于源树中的其他三个位置。还有 6 个其他此类符号链接也同样遭到破坏。

查看生成这些符号链接的 libstdc++-v3/include/Makefile,它希望在源树中的同一位置找到所有 c_base_headers 文件,但事实并非如此。这应该如何运作?

gcc 配置选项是:

gcc-${GCC_VERSION}/configure --target=$CONF_TARGET --prefix=${PREFIX} --exec_prefix=${PREFIX} --bindir=${PREFIX}/bin --sbindir=${PREFIX}/bin --libexecdir=${PREFIX}/libexec --datadir=${PREFIX}/share --sysconfdir=${PREFIX}/etc --sharedstatedir=${PREFIX}/share/com --localstatedir=${PREFIX}/var --libdir=${PREFIX}/lib --includedir=${PREFIX}/include --oldincludedir=${PREFIX}/include --infodir=${PREFIX}/share/info --mandir=${PREFIX}/share/man --enable-largefile --disable-nls --enable-ipv6 --with-gnu-ld --enable-shared --enable-languages=c,c++,objc,fortran --enable-threads=posix --disable-multilib --enable-c99 --enable-long-long --enable-symvers-gnu --enable-libstdcxx-pch --program-prefix=${CMD_PREFIX} --enable-target-optspace --enable-cheaders=c_std --disable-bootstrap --disable-libgomp --disable-libmudflap --with-float=soft --with-sysroot=${NEWSYSROOT} --with-build-sysroot=${SYSROOT} --with-build-time-tools=${INSTALLDIR}/${PREFIX}/${CONF_TARGET}/bin --disable-libunwind-exceptions --disable-libssp --enable-__cxa_atexit

答案1

您使用什么环境?您的目标环境是什么?

ARM 有一些工具链可供下载:ARM 开发者网站

您可能需要为目标环境提供可用的库和头文件。对于 FreeBSD,这将是适当的 base.txz 文件,需要将其解压到正确的位置。

对于 386 和 amd64 FreeBSD v 11.* i,有适用于 ARM 的现有 GCC 交叉编译器。或者具体来说是arm64/aarch64。即使有艾达。这是在 /usr/ports/lang/gnatcross* 中找到的端口中。

如果你用谷歌搜索,应该很容易使用一些配置选项来编译通用的arm交叉编译器。很多人在编译交叉编译器时都以arm为例。

如果您有一个 ARM 或 aarch64 架构的 Raspberry PI,您可能会拥有很好的本机环境。然后您需要做的就是避免依赖操作系统的东西。

RPI 有多种可用的操作系统,包括:FreeBSD、Raspbian 以及其他 Linux 和 BSD 版本。

我正在为 aarch64 FreeBSD 12 交叉编译 GCC。它需要一些修改。于是我复制了涉及的端口并进行了修改。困难的一点是找出如何交叉编译 gcc。并找出需要禁用哪些选项。

相关内容