0

つまり、この質問は基本的に.so、実行可能ファイルの開発バージョンをdevディレクトリにロードし、インストールされた.soファイルを他のファイルにロードするようにLinuxに指示することに関するものです。

長い間:共有ライブラリを想像してみてください。それを呼びましょうlibasdf.so。そして、次のディレクトリを想像してみてください。

/home/user/asdf/lib: libasdf.so
/home/user/asdf/test: ... perform_test
/opt/asdf/lib: libasdf.so
/home/user/jkl: ... use_asdf

つまり、ライブラリの開発ディレクトリ(/home/user/asdf)があり、以前の安定バージョン(/opt/asdf)とそれを使用する他のプログラム()のコピーがインストールされています/home/user/jkl

私の質問は、Linuxに、/home/user/asdf/lib/libasdf.so実行時/home/user/asdf/test/perform_testにロードし、/opt/asdf/lib/libasdf.so実行時にロードするように指示するにはどうすればよい/home/user/jkl/use_asdfですか?リンク中にディレクトリを指定しても-L、Linuxは他の方法(たとえば/ect/ld.so.conf、および$LD_LIBRARY_PATH)を使用して.soファイルを検索することに注意してください。

私がそのようなものを必要とする理由は、もちろん、開発ディレクトリ内の実行可能ファイルはライブラリの最新バージョンとリンクする必要がありますが、他のプログラムは安定バージョンを使用したいからです。

../libのディレクトリからテストを実行することはできないため、ライブラリパスを配置することは、完全に正しくないことは言うまでもなく、安全なアイデアのようには思えません。

私が考えた解決策の1つは、インストール時にperform_testリンクを設定し、名前を付けてlibasdf-dev.soコピーlibasdf-dev.solibasdf.so、他のユーザーにリンクさせることです。ただし、このソリューションには1つの問題があります。次の追加ディレクトリを想像してみてください。

/home/user/asdf/tool: ... use_asdf_too

どちらにインストールされますか:

/opt/asdf/bin: use_asdf_too

use_asdf_too私の解決策では、何に対してリンクする必要があるのか​​は不明です。に対してリンクさlibasdf.soれている場合、devディレクトリから呼び出された場合は正しく機能せlibasdf-dev.soず、に対してリンクされている場合は、インストールされた場所から呼び出された場合は正しく機能しません。

私に何ができる?これは他の人によってどのように管理されていますか?

4

1 に答える 1

1

インストールされた共有オブジェクトは通常、 「.so」で終わるだけではありません。通常、 などのsonameも含まれlibadsf.so.42.1ます。開発用の .so ファイルは通常、完全にバージョン管理されたファイル名へのシンボリック リンクです。リンカーは .so ファイルを探して完全なファイル名に解決し、ローダーは代わりに完全にバージョン管理されたライブラリをロードします。

于 2013-01-28T13:54:13.653 に答える