私は、このようなlibphp5.so
などの共有ライブラリとldd
を実行すると、私はそれがlibmysqlclient.so.16
に依存していることを参照してください。Linuxで共有ライブラリの依存関係のパスはどのように決定されますか?
$ ldd ./libphp5.so libmysqlclient.so.16 => /usr/lib/mysql/libmysqlclient.so.16 [other dependencies snipped out]
は、共有ライブラリのバイナリに焼いたこれらの依存ファイル名とパス(/usr/lib/mysql/libmysqlclient.so.16
)はありますか?あるいは、このパスは、偶然に含まれている、など/etc/ld.so.conf.d/mysql-i386.conf
介するなど、いくつかの他の手段によって決定されます。
/usr/lib/mysql/
もう一つの事は私に不可解されています
私はソースからコンパイルすることを持っている共有ライブラリがあります。これはlibmysqlclient_r
に依存しています。私はldd mylib.so
私が見ていたとき
gcc -shared -L/usr/lib/mysql -lmysqlclient_r [+various other switches]
:
libmysqlclient_r.so.16 => /usr/lib/mysql/libmysqlclient_r.so.16 (0x0055c000)
しかし、私が見/usr/lib/mysql
ディレクトリに:
-rwxr-xr-x. libmysqlclient_r.so -> libmysqlclient_r.so.16.0.0 lrwxrwxrwx. libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0 -rwxr-xr-x. libmysqlclient_r.so.16.0.0 lrwxrwxrwx. libmysqlclient.so -> libmysqlclient.so.16.0.0 lrwxrwxrwx. libmysqlclient.so.16 -> libmysqlclient.so.16.0.0 -rwxr-xr-x. libmysqlclient.so.16.0.0
libmysqlclient_r.so
がある。このこのライブラリーを作製するためにgcc
コンパイラスイッチは次のようになりlibmysqlclient_r.so.16.0.0
へのシンボリックリンクです。なぜldd
には、依存関係がlibmysqlclient_r.so.16
と表示されますか?私はここで行方不明のいくつかの魔法がありますか?
私は長年にわたりWindows開発者であったため、gcc
とLinuxでの開発に少し新しくなっています。
私のLinuxディストリビューションはCentOS 6.0 x86-32bitです。
が、おかげでそれはですいくつかの有用なポインター。 – Kev
あなたは分かりませんが、私はこれをさらにアップホートすることができればと思います。私の質問は、Pythonチーズショップパッケージ(MySQL-Python)でコンパイル/ビルドにもかかわらず 'libmysqlclient_r'を読み込むことができなくなってしまいました。 'LD_DEBUG = libs ldd'は私の人生をより安全にしました。 '/ etc/ld.co.conf.d'に保存されたパスファイルは' .conf'で終わらず、 '/ etc/ld.so.conf'ファイルは' include ld.so. conf.d/* .conf'となります。したがって、 '/ usr/lib/mysql'フォルダは決して検索されませんでした。 – Kev