GCCをビルドするときにC ++ライブラリが無効にならないのはなぜですか?

GCCをビルドするときにC ++ライブラリが無効にならないのはなぜですか?

私は2番目の最新の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

Googleで見たのでバグではないようですが、私が見たこれらの修正とヒントは私の問題ではありません。 C++ ライブラリは無効になっていないようです。

ベストアンサー1

私は同じ問題を抱えており、混乱しています。手がかりはエラー行にあります。

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

明らかにconfigure-gmp(makeの)ターゲットは親プロジェクトから渡された関数名です。

秘密は、コマンドラインに次のようにスペルを入力することです。

--disable-libstdc__-v3

まあ。そうですね。プラス記号の代わりに下線を使用してください。

気づく:GCC 5.1の出力に基づいて./configure --help可能です。--disable-libstdcxxオプションも同じ効果があります。しかし、これがいつ導入されたかは確かではなく、確認したこともありません。

自発的に読んでください;)

これは私の理論に基づいています。このバグレポートGCCトラッカーから。

私のようなコマンドラインは、GCCソースツリーにすでにリンクされているGMPを使用しているか、スクリプトがcontrib/download_prerequisitesGCC tarball(私が使用した方法)からダウンロードされたことを示します。これはシンボリックリンクを実行します。

今はこんな状況だと仮定してみよう。記載されているようにこのドキュメントページからGMP、MPFR、MPCはGCCの前提条件です。よりWikiページセクションサポートライブラリこれは「組み込み」方法の詳細な説明です。

gmp-4.3.2上記のスクリプトは、GNU FTPサーバーからダウンロードできるようにハードコードされています(GCC 5.1に準拠)。

奇妙なことに4.3.2が言及されています。旧バージョンページバージョン 4.3.1 の範囲内:

GMP 4.3.1関連の問題(上記の4.3.2に関する情報も参照):

ただし、実際には独自のリストを取得できません(日付/時間もありません)。

GCCトラッカーのバグレポートでは、Ralfは次のように述べました。

このエラーは、現在の引数なしで --enable/--disable/--with/-- の英数字、マイナス記号、ドット、またはアンダースコア以外の文字を受け入れない引数を解析する Autoconf コードで発生します。私はこれがAutoconfで修正されるべきだと思います。

しかし、configure.acにもバグがあります。これを修正したら、次のものを使用できます。

--disable-libstdc__-v3

(つまり、プラス記号をアンダースコアに変換します。)GCCが固定のAutoconfバージョンに切り替えられると、プラススイッチは不要になります。

これで、パッケージマネージャのコンピュータで利用可能なAutoconfバージョンを使用してパッケージを準備しました。そして我々は比較的古いバージョンのGMPを使用しており、configureGMPタールボール内で生成されたスクリプトは上記のチケットでRalfが指摘した欠陥が発生しやすいです。

したがって、依存関係が必要なものよりも少し速いので、この愚かな間違いを修正する必要があります。

おすすめ記事