4

ここでこの問題を検索し、同様の質問をいくつか見つけましたが、解決策がうまくいきません。これが私の問題です。私のアプリケーションは、openldap-2.3 の共有ライブラリでコンパイルしています。Openldap には /usr/lib/libldap-2.3.so.0.2.31 にリンクされた /usr/lib/libldap-2.3.so.0 があります。-lldaplibldap-2.3.so.0 ファイルをアプリケーションにリンクするオプションを gccに渡しました。

しかし、libldap.so のような特定の名前でリンクしたいのです。今後、開発システムでopenldapバージョンを 2.4 に変更すると、libldap-2.4.so.XXX バージョンにリンクされます。

では、アプリケーションを特定の名前にリンクして、常に libldap.so のような同じ名前を検索するにはどうすればよいでしょうか。

注: /usr/lib/libldap-2.3.so.0 のソフトリンクを /usr/lib/libldap.so として作成し、ライブラリ名/usr/lib/libldap.soをコンパイラに渡し-lます。アプリケーションはリンク エラーなしで正常にコンパイルされますが、同じ libldap が表示されます。 -2.3.so.0 依存関係。

4

1 に答える 1

1

共有ライブラリのメカニズム(リンクは古いですが、まだ関連があります) Unix では、ビルド時に実行可能ファイルを liba.so に対してリンクすることによって機能します。これは、liba.so.1 へのシンボリック リンクであり、liba.so.1.2 へのリンクです。 . 次に、実行可能ファイルは liba.so.1 を記録して、起動時にロードします。liba.so を更新すると、liba.so.1.5 になる可能性があります (ABI の変更なし、最初の桁は変更されません)。リンクは liba.so --> liba.so.1 --> liba.so のようになります。 .1.5、および実行可能ファイルは 1.5 を透過的に使用するようになりました。バージョンが liba.so.2.0 になった場合 (API 変更!)、システムは liba.so --> liba.so.2 --> liba.so.2.0 を作成します。古い実行可能ファイルはまだ 1.5 を使用していますが、新しくビルドされたプログラムはすべて 2 を参照します。これはすべて、1.x が残っている限り機能します。おそらくあなたのディストリビューションは、並行してインストールできるライブラリパッケージを提供しています。compat-liba-1古い実行可能ファイルのためのパッケージ。

于 2013-02-05T12:37:11.943 に答える