為什麼在建構 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 (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 --help
GCC 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 版本,因此
configure
GMP tarball 中生成的腳本很容易出現缺陷。 Ralf 在上述票證中註明。因此,您需要解決這個愚蠢的錯誤,因為依賴關係比可能需要的要舊一些。