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