Gcc

為什麼在建構 GCC 時沒有禁用 C++ 庫

  • May 18, 2015

我得到了第二個最新的 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 (debian-kernel@lists.debian.org) (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

我不認為這是我在Google上看到的錯誤,但是我看到的所有這些修復和提示都不是我的問題。似乎 C++ 庫不會被禁用。

我有完全相同的問題並且很困惑。線索在錯誤行中:

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 的先決條件。有關此“內置”方法的更詳細說明,請參閱Wiki 頁面部分支持庫。

上述腳本硬程式碼(從 GCC 5.1 開始)gmp-4.3.2要從 GNU FTP 伺服器下載。

奇怪的是,在 4.3.1 版本範圍內的舊版本頁面上提到了 4.3.2 :

GMP 4.3.1 的問題(另請參閱上面有關 4.3.2 的資訊):

但實際上並沒有得到自己的列表(也沒有日期/時間)。

在錯誤報告中,關於 GCC 跟踪器,Ralf 指出:

此錯誤來自解析參數的 Autoconf 程式碼,它目前不允許在 –enable/–disable/–with/–without arguments 中使用字母數字、減號、點或下劃線以外的字元。我想這應該在 Autoconf 中修復。

但是,configure.ac 中也有一個錯誤,修復了該錯誤後,您將能夠使用

--disable-libstdc__-v3

(即,加號轉換為下劃線)。一旦 GCC 切換到固定的 Autoconf 版本,就不再需要加號轉換。

現在,由於我們已經使用軟體包維護者機器上可用的任何 Autoconf 版本準備了軟體包*,並且*我們使用的是相對較舊的 GMP 版本,因此configureGMP tarball 中生成的腳本很容易出現缺陷。 Ralf 在上述票證中註明。

因此,您需要解決這個愚蠢的錯誤,因為依賴關係比可能需要的要舊一些。

引用自:https://unix.stackexchange.com/questions/154993