15

Linuxのシステムライブラリよりもローカルライブラリを強制的に使用するにはどうすればよいですか?

実行可能ファイルをproject/libディレクトリ内のいくつかの.soファイルに明示的にリンクしました(例:../ lib / libluajit.so)。

gdbで実行可能ファイルを実行するか、lddを使用すると、システムlibluajit-5.1.so.2が引き続き使用されていることがわかります。

次に、LD_LIBRARY_PATHをproject / libディレクトリに設定してエクスポートし、実行可能ファイルを実行しました。どういうわけか、それはまだシステムライブラリを取得しています(gdbとlddの両方で確認されています)

それがどのように可能であるか、そしてプロジェクト/libディレクトリのローカルlibluajit.soを使用するように強制するために何ができるかを知りたいです。

4

2 に答える 2

24

リンクするときは、ライブラリのディレクトリを指定し、rpathも使用します。

-Wl、-rpath、/ abstract / path / to / your / library -L / abstract / path / to / your / library -llibrary

-Lリンク時にライブラリを検索する場所をリンカに指示-rpathし、実行時にライブラリを検索する場所を指示します。

ライブラリファイル自体の実際のパスではなく、.soファイルを含むディレクトリが必要であること-Lに注意してください。-rpath

于 2012-11-13T19:09:39.753 に答える
8

システムが提供するバージョンよりも独自のバージョンのライブラリを使用する理由を疑問視する必要があります(複数の異なるバージョンが浮かんでいることは、トラブルとユーザーの混乱のレシピに他なりません)。

export LD_PRELOAD=<path_to_your_shared_obj>ただし、独自のバージョンをロードするように強制できるはずです。

ライブラリのバージョンを上書きするメカニズムは、どのような種類の特権の昇格(たとえばsudo)でも持続しないことに注意してください。

于 2012-11-13T19:08:46.197 に答える