1

GLIBCXX_3.4.11を使用して、libstdc++。soに対して動的にリンクされた共有ライブラリをコンパイルしました。stdc++ライブラリがバージョン3.4.10のみの人にコードを送信したいと思います。彼にライブラリのバージョンを更新するように依頼するのではなく(これはソフトウェアの顧客であるため、システムファイルを変更する意思がある、または変更できるとは思いません)、適切なバージョンのlibstdc++。soを出荷したいと思います。私のコードのディレクトリの場所を含むlibフォルダ。適切な(後の)バージョンを使用するために自分のコードを取得するにはどうすればよいですか?/etc/ld.so.confにディレクトリ/lib64が含まれていることがわかりました。このディレクトリには、問題のある古いバージョンのlibstdc++。soがあります。LD_LIBRARY_PATHを設定しても、これは上書きされません。これは、宣伝されている動作から逸脱しているようです。なぜこれが起こっているのか考えていますか?かなり単純なタスクを完了するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

この質問は古いと思いますが、似たような自分のリンクの問題を解決しようとして見つけました。同僚のバージョンのライブラリと互換性のあるバージョンのlibstdc++に対してプログラムをビルドする必要があります。もちろん、最も簡単な解決策は、彼のバージョンのライブラリに対してリンクすることです。これにより、ライブラリをリンクするために彼の側で特別な調整を行う必要がなくなります。

これを行うには、バイナリ互換ライブラリを構築できるバージョンのGCCをインストールして、彼のバージョンのlibstdc++に対して実際にリンクできるようにする必要があります。GLIBCXX_3.4.11はgcc-4.4以降のものであるため、gcc-4.3が必要になります。これを使用してプログラムを作成すると、体調が良くなるはずです。

ライブラリのABI互換性のリストについては、次のページを参照してください。http: //gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

すでにお持ちのlibstdc++のバージョンを必要とするrpm/debをビルドすることもできます。それが利用できない場合は、インストールを拒否してください。これにより、彼のシステムが正しい依存関係でセットアップされている場合、彼はあなたのライブラリを使用できるという約束を彼に与える少しのインターフェースが得られます。その意味で、それはあなたがしていることとサポートしていないことにおけるあなたのライブラリの緩いSLAのようなものです。

お役に立てば幸いです。

于 2011-09-05T12:18:07.327 に答える