リンカーに非標準ディレクトリでstdc ++ライブラリを見つけるように強制します。

リンカーに非標準ディレクトリでstdc ++ライブラリを見つけるように強制します。

私は読んだたくさんガイドは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

私の環境にはもはやリンカーエラーはありません。はい、しかし問題は解決しません。下流のユーザーは、このライブラリが正しい場所にあるとは思わないでしょう。なぜ最初にLD_LIBRARY_PATHを検索するのですか? ? !

答え1

これはコンパイラスイッチで使用する必要がありますWl,--rpath=/apps/gcc_4.8.0/lib/libstdc++.so.6

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

関連情報