Dynamic-Linking

ld 忽略 ld.so.conf

  • April 11, 2020

這是我的/etc/ld.so.conf

/usr/local/lib64
/usr/local/lib
include /etc/ld.so.conf.d/*.conf

該目錄/etc/ld.so.conf.d/包含mysql-x86_64.conf僅包含這一行:/usr/lib64/mysql

目錄 [在文件中/usr/lib64/mysql列出.conf] 包含以下文件:

total 45,961,216
drwxr-xr-x   2 root root      4,096 Apr 11 17:20 ./
drwxr-xr-x 121 root root     81,920 Mar 30 20:01 ../
-rw-r--r--   1 root root 28,951,398 Dec  9 21:40 libmysqlclient.a
lrwxrwxrwx   1 root root         20 Dec  9 21:56 libmysqlclient.so -> libmysqlclient.so.21*
lrwxrwxrwx   1 root root         25 Dec  9 21:56 libmysqlclient.so.21 -> libmysqlclient.so.21.1.19*
-rwxr-xr-x   1 root root 16,869,104 Dec  9 21:40 libmysqlclient.so.21.1.19*
-rw-r--r--   1 root root     44,910 Dec  9 21:36 libmysqlservices.a

執行ldconfig -p | grep mysql返回:

   libmysqlclient.so.21 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.21
   libmysqlclient.so (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so

當我嘗試連結一個非常小的 MySQL 測試程序時,我收到此錯誤:

/usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: cannot find -lmysqlclient

添加-L/usr/lib64/mysql到連結器的作品。

我的問題:

根據這個答案和在網際網路上找到的其他文件ldd正在考慮/etc/ld.so.conf文件的內容 - 為什麼在我的情況下內容被忽略?我究竟做錯了什麼?

ld.so.conf``ld.so是執行時動態連結器的配置文件。

ld故意忽略它。它有自己的預設值,並由-L. 通常,搜尋路徑也由驅動它的編譯器決定——參見gcc -print-search-dirsGCC。

LD_LIBRARY_PATH也只會影響ld.so不會ld

另請參閱靜態連結器、動態連結器、載入器和動態載入器的可執行 ELF 文件分別是什麼?

引用自:https://unix.stackexchange.com/questions/579449