非標準ディレクトリでstdc ++ライブラリを検出するようにリンカーを強制する


0

が他の何よりも先に検索されるという多くのガイダンスを読みましLD_LIBRARY_PATHが、私の.soライブラリの1つはでリンクしlibtdc++.so.6てい/usr/lib64ます。

ldd mylib.so:
...
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f82abd18000)
...

次のような別の場所mylib.soにリンクしたいlibstdc++.so.6/apps/gcc_4.8.0/lib/libstdc++.so.6

その/apps/gcc_4.8.0/libためLD_LIBRARY_PATH、に追加しますが、には含まれていません/usr/lib64、まだ見つかりません。

追加する場合:

setenv LD_PRELOAD /apps/gcc_4.8.0/lib/libstdc++.so.6

私の環境では、これ以上リンカーエラーはありません。ええ、しかしそれは問題を解決しません。下流のユーザーは、このライブラリが適切な場所にあることに依存したくないでしょう。ISN "T LD_LIBRARY_PATHが最初に検索される理由!?!

回答:


0

Wl,--rpath=/apps/gcc_4.8.0/lib/libstdc++.so.6コンパイラスイッチで動作するはずです。

更新:新しいローダーも必要な場合は、次のコンパイラスイッチを使用します。-Wl,--dynamic-linker=<path-to-the-new-dynamic-linker>


残念ながら、それは私にはうまくいきませんでした。実行時エラーが引き続き発生し、リンカー(またはローダーかもしれません)は/ urs / lib64を探し続けます。これまでのところ、LD_PRELOADのみが機能しています。
カイル英語

@KyleEnglish私は私の答えに更新
アル・バンディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.