为什么构建 GCC 时没有禁用 C++ 库

为什么构建 GCC 时没有禁用 C++ 库

我获得了第二个最新的 gcc 和最新的 binutils,并尝试在 Debian 系统上创建交叉编译器。由于某种原因,GCC 无法编译:

make[2]: Leaving directory `/home/dylan/Documents/cross/gcc-build/fixincludes'
Configuring in ./gmp
configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1
make[1]: Leaving directory `/home/dylan/Documents/cross/gcc-build'
make: *** [all] Error 2

使用此配置:

../gcc-4.9.0/configure                               \
    --target=$TARGET                                \
    --prefix=$PREFIX                                  \
    --with-sysroot=/mnt                              \
    --with-newlib                                    \
    --without-headers                                \
    --with-local-prefix=/tools                       \
    --with-native-system-header-dir=/tools/include   \
    --disable-nls                                    \
    --disable-shared                                 \
    --disable-multilib                               \
    --disable-decimal-float                          \
    --disable-threads                                \
    --disable-libatomic                              \
    --disable-libgomp                                \
    --disable-libitm                                 \
    --disable-libquadmath                            \
    --disable-libsanitizer                           \
    --disable-libssp                                 \
    --disable-libvtv                                 \
    --disable-libcilkrts                             \
    --disable-libstdc++-v3                           \
    --enable-languages=c,c++

我从 Linux From Scratch 运行版本检查并得到以下结果:

bash, version 4.2.37(1)-release
/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Debian) 2.22
bison (GNU Bison) 2.5
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.13
diff (GNU diffutils) 3.2
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Debian 4.7.2-5) 4.7.2
GNU C Library (Debian EGLIBC 2.13-38+deb7u4) stable release version 2.13
grep (GNU grep) 2.12
gzip 1.5
Linux version 3.2.0-4-amd64 ([email protected]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.60-1+deb7u3
m4 (GNU M4) 1.4.16
GNU Make 3.81
patch 2.6.1
Perl version='5.14.2';
GNU sed version 4.2.1
tar (GNU tar) 1.26
Texinfo: makeinfo (GNU texinfo) 4.13
xz (XZ Utils) 5.1.0alpha
Compilation OK

我不认为这是一个错误,因为我在谷歌上看到它,但是我看到的所有这些修复和提示都不是我的问题。看起来 C++ 库不会被禁用。

答案1

我遇到了完全相同的问题并且很困惑。线索就在错误行中:

configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1

显然,configure-gmp目标(在 make 中)是从父项目传递的功能名称。

诀窍是在命令行中将其拼写如下:

--disable-libstdc__-v3

恩,那就对了。用下划线代替加号!

注意:根据./configure --helpGCC 5.1 的输出,有可能--disable-libstdcxx选项也会有同样的效果。不过,不清楚这个是什么时候引入的,我也没有检查。

自愿阅读;)

这是我的理论基于这个错误报告在 GCC 追踪器上。

你的命令行,就像我的一样,表明你使用的 GMP 要么已经链接到 GCC 源代码树中,要么是脚本contrib/download_prerequisites从 GCC tarball 中下载的(这是我使用的方法) - 它执行符号链接。

我们暂时假设这种情况。如所列在此文档页面上GMP、MPFR 和 MPC 是 GCC 的先决条件。请参阅维基页面部分支持库有关此“内置”方法的更详细说明。

上述脚本硬编码(从 GCC 5.1 开始)gmp-4.3.2从 GNU FTP 服务器下载。

奇怪的是 4.3.2 被提到旧版本页面在 4.3.1 版本的范围内:

GMP 4.3.1 的问题(另请参阅上面有关 4.3.2 的信息):

但实际上并没有获得自己的列表(也没有日期/时间)。

在 GCC 跟踪器的错误报告中,Ralf 指出:

此错误来自解析参数的 Autoconf 代码,它当前不允许在 --enable/--disable/--with/--without 参数中使用字母数字、减号、点或下划线以外的字符。我想这应该在 Autoconf 中修复。

但是,configure.ac 中也存在一个错误,修复该错误后,您将能够使用

--disable-libstdc__-v3

(即,将加号转换为下划线)。一旦 GCC 切换到固定的 Autoconf 版本,就不再需要加号转换了。

现在,由于我们已经使用包维护者机器上可用的任何 Autoconf 版本准备了包我们使用的是相对较旧的 GMP 版本,按理说,configureGMP tarball 内生成的脚本很容易出现 Ralf 在上述票证中指出的缺陷。

因此,您需要解决这个愚蠢的错误,因为依赖关系比可能需要的要早一些。

相关内容