0

最近 gcc 4.9.2 をインストールしましたが、libs とリンクするときに問題が見つかりました。

検索パスの出力:

install: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/
programs: =/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/
libraries: =/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../lib64/:/lib/x86_64-unknown-linux-gnu/4.9.2/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/

実際、問題は次のとおりです。

/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/

両方のディレクトリに libstdc++.so.6 があり、lib64 フォルダーにあるものを使用する必要があるため、これら 2 つのライブラリの順序を変更する必要があります (lib64 の検索優先度が高くなるように)。

どうすればいいのですか?

しないでください:

1、LD_LIBRARY_PATH を変更して明示的に libstdc++.so.6 を含めることをお勧めします。x86_64-linux-gnu フォルダーには、lib64 フォルダー内の古いバージョンのものが他にもあると確信しているためです。古いバージョンから g++ をアップグレードしました。

2、その lib64/libstdc++.so.6 を g++ -L オプションに明示的に含めることを提案します。

どうもありがとう。

/************************詳細情報を編集********************* ***/

以下の要求に応じて、構成とインストールに関する詳細をいくつか示します (gcc.gnu.org から 4.9.2 のソースをダウンロードし、展開して 4.9.2 の最上位フォルダーで開始しました)。

mkdir ../gcc-build                                   &&
cd    ../gcc-build                                   &&

../gcc-4.9.2/configure                               \
    --prefix=/usr                                    \
    --libdir=/usr/lib                                \
    --enable-shared                                  \
    --enable-threads=posix                           \
    --enable-__cxa_atexit                            \
    --disable-multilib                               \
    --with-system-zlib                               \
    --enable-languages=c,c++ &&
make
4

1 に答える 1

1

新しい (または既存の GCCspecsファイルを変更する) ことができます。ドキュメントはこちらです。

私の知る限り、specsファイルは「インストール」ディレクトリにあるため、
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs存在する可能性があります(存在しない場合は作成できます)。

私の知る限り、組み込みのデフォルトがいくつかありますが、明示的なものを持つようにシステムを構成できます。

GCCのデバッグ オプションについてもお読みください。-dumpspecs組み込みのデフォルト仕様を取得するために使用したい場合があります。

詳細は、特にGCCをソース コードからコンパイルした場合は、システムに非常に固有である可能性があります。

特定の問題に対して信頼できる解決策を提供するのに十分なspecsファイルに精通していません。詳細についてはお問い合わせgcc-help@gcc.gnu.orgください。


gccNB: をwith (デフォルトやその他--prefix=/usrのような非システム プレフィックスではなく)に設定するのは間違いだと思いがちです(または、少なくとも も使用します)。システムと混同する可能性があります。システムを置き換えたい場合(これはおそらく危険です) 、システムが持っていたのと同じ引数で新しいものを構成する必要があります。システムがどのように構成されたかを示すことに注意してください(上書きする前に行う必要があります)。--prefix=/usr/local/--prefix=/opt/--program-suffix=-4.9gccgccgccgccgcc/usr/bin/gcc -vgcc

いくつかの古いシステムで最近の GCC 4.9 をコンパイルするとき、私は通常、それを で構成してからに追加し--prefix=/usr/local/、それを使用してプログラムを構築するために使用することをお勧めします。--program-suffix=-4.9/usr/local/bin/$PATHmake CC=gcc-4.9 CXX=g++-4.9

于 2015-02-22T21:51:19.467 に答える