1

異なる gcc バージョンで生成された 2 つの実行可能ファイルがgcc 3.4.2ありgcc 4.3.2ます。

どちらも同じ環境、つまり同じLD_LIBRARY_PATHを持つ環境で実行する必要があります。

現在、 のパスは の4.3.2前に配置され、3.4.2エラーが発生し3.4.2ています。

libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by../../src/hello)

必要なロードタイムファイルを見つける場所であるexeに情報を保存できるソリューションについて考えています。

問題を引き起こしている以下のビルドスクリプトを作成しました:

基本的にO3オプションは最適化を行っています。

/opt/gcc-4.3.2/bin/g++ -pipe -O3 -c hello4_3_2.cpp
/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -L$/opt/gcc-4.3.2/lib64/libstdc++

/opt/gcc-3.4.2/bin/g++ -pipe -O3 -c hello3_4_2.cpp
/opt/gcc-3.4.2/bin/g++ -o hello3_4_2 hello3_4_2.o -L$/opt/gcc-3.4.2/lib64/libstdc++

以下のスクリプトは私のために機能します:(O3オプションなし)

/opt/gcc-4.3.2/bin/g++ -pipe  -c hello4_3_2.cpp
/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -L$/opt/gcc-4.3.2/lib64/libstdc++

/opt/gcc-3.4.2/bin/g++ -pipe  -c hello3_4_2.cpp
/opt/gcc-3.4.2/bin/g++ -o hello3_4_2 hello3_4_2.o -L$/opt/gcc-3.4.2/lib64/libstdc++

今:

  1. それを達成する他の方法があるかどうか知りたかったのです。

  2. このようにすることの欠点はありますか。

4

2 に答える 2

3

rpathリンクするときを指定します。

/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -Wl,-rpath,/opt/gcc-4.3.2/lib64
#                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

これにより、ライブラリ検索パスが実行可能ファイルにハードコーディングされます。

ldd ./hello4_3_2正しいライブラリが見つかっているかどうかを実行せずにチェックするために使用できます。

于 2012-07-31T07:24:40.027 に答える
0

libstdc ++マニュアルには、いくつかのオプションがリストされています

于 2012-07-31T12:14:03.840 に答える