10

実行可能ファイルのrpathは、実行時に共有オブジェクトを検索する 1 つ以上のディレクトリを指定します。

私の質問は、共有オブジェクト ファイル自体にも静的にコンパイルされたrpaths があるかどうかです。

最近、共有オブジェクトとリンクするときにランタイム エラーが発生しました。

./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so)

このエラーは、実際にはライブラリ自体mylib.soが静的にコンパイルされていることを示していrpathます。

私の理解では、それrpathは実行可能ファイルにのみ適用され、共有オブジェクトには適用されませんでした。rpath 共有オブジェクトにも適用されますか?

4

1 に答える 1

8

共有オブジェクトファイル自体も静的にコンパイルされていますか?rpaths

それらが-Wl,-rpath=...オプションとリンクされているかどうかに応じて、可能性があります (またはそうでない可能性があります)。

このエラーは、実際にはライブラリ自体mylib.soが静的にコンパイルされていることを示していrpathます。

エラーメッセージはそれをまったく言っていません。そのアイデアはどこから得たのですか?

mylib.so持っているかどうかを知りたい場合DT_RPATHは、次のようにします。

readelf -d mylib.so | grep 'R.*PATH'  # could also have RUNPATH

私の理解では、それrpathは実行可能ファイルにのみ適用され、共有オブジェクトには適用されませんでした。rpath共有オブジェクトにも適用されますか?

あなたの理解は正しくなく、RPATH(およびRUNPATH) 共有オブジェクトに対しても同様に機能します。

于 2015-05-21T17:13:46.947 に答える