當運行ldd
針對一個共享庫如libphp5.so
我看到它有上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]
我看到:該gcc
編譯器開關,產生這個這個庫的樣子
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
是與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