Это мое/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
- почему в моем случае содержимое игнорируется? Что я делаю не так?
решение1
ld.so.conf
— это файл конфигурации для ld.so
динамического компоновщика времени выполнения.
ld
игнорирует его намеренно. Он имеет свои собственные значения по умолчанию, дополненные -L
. Обычно путь поиска также определяется компилятором, управляющим им — см. gcc -print-search-dirs
для GCC.
LD_LIBRARY_PATH
также влияет только ld.so
,нетld
.
Смотрите такжеКаковы исполняемые файлы ELF для статического компоновщика, динамического компоновщика, загрузчика и динамического загрузчика?