3

gcc/g++ の 2 つのバージョンがインストールされています。 /opt/gcc-4.4.3)。

gcc/g++ 4.4.3 をデフォルト バージョンにしたとき (「update-alternatives」を使用して、/usr/bin/gcc と /usr/bin/g++ がディレクトリ「/opt/gcc-4.4」の下の対応するものを指すようにします) .3/bin") を実行してファイルをコンパイルすると、常に次のエラーが報告されました。

/usr/include/c++/4.5/bits/basic_string.h:1659: `std::basic_string, std::allocator::_S_construct_aux_2(unsigned long, char, std::allocator const&)' への未定義参照

コンパイラが /usr/include/c++/4.5 の下で c++ のヘッダー ファイルを見つけようとしているようで、リンク エラーが発生します。gcc のデフォルト バージョンを gcc-4.5 に変更すると、エラーはなくなりました。

では、正しいディレクトリ "/opt/gcc-4.4.3/include" の下でコンパイラにヘッダー ファイルを検索させるにはどうすればよいでしょうか。CPLUS_INCLUDE_PATH をエクスポートしようとしましたが、うまくいかないようです。

PS: gcc -v

Using build-in specs
Target: x86_64-suse-linux
Configured with: ./configure --prefix=/opt/gcc-4.4.3
Thread model: posix
gcc version 4.4.3 (GCC)
4

2 に答える 2

2

gcc 4.4.3のコンパイルを再試行し--with-gxx-include-dir=/opt/gcc-4.4.3/includeますが、構成ステップでオプションを使用します。

于 2013-02-20T13:07:26.747 に答える
1

それは、何をしたか、何をしなかったかの問題かもしれませんupdate-alternatives

別のコンパイラを構築するときは、問題を発見できるように--prefix and を使用する傾向があります。実行されている--program-suffix=-XYものを確認します。cpp

/opt/gcc-4.4.3/bin/g++ --print-prog-name=cpp
cpp -v </dev/null
/opt/gcc-4.4.3/bin/cpp -v < /dev/null
/opt/gcc-4.4.3/bin/g++ -print-search-dirs | grep '^programs:'

ld(とasで確認することもできます--print-prog-name)

ビルド中に " を設定CPPFLAGS="-v -Hすると、物事を追跡するのにも役立つ場合があります。

醜い回避策かもしれませんCPPFLAGS="-nostdinc -nostdinc++ -I/opt/gcc-4.4.3/include/"が、コンパイル環境を修正することをお勧めします。これは、解決できる問題と同じくらい多くの問題を引き起こす可能性があるためです。オプションもあり-isystem-sysroot特定の場合に役立つ場合があります。 http://gcc.gnu.org/onlinedocs/cpp/Invocation.htmlを参照してください。

于 2013-02-20T13:41:00.247 に答える