Назад | Перейти на главную страницу

Найдите расположение файла libmysqlclient.so.X в среде Linux

Я собираю сценарий, который требует знания файла libmysqlclient.so. [15 | 16 | 18] .so. Обычно он находится в / usr / lib /, / usr / lib64 / или в подкаталоге mysql / вышеупомянутых каталогов.

Я пробовал несколько вещей. Прежде всего, иногда расположение можно найти в файле mysql в /etc/ld.so.conf.d/mysql*, но на многих серверах этого не было.

Другая возможность - поиск этих файлов в указанных выше каталогах. Я буду знать, какая версия MySQL используется, поэтому я могу найти подходящий файл .so, но, к сожалению, у многих людей установлено несколько .so. Например, оба могут существовать:

В этой ситуации я не уверен, какой файл .so используется.

Есть ли способ узнать, где установлен правильный libmysqlclient.so?

Это даст вам все файлы libmysql, распознанные компоновщиком. Чем выше в списке, тем выше приоритет и с большей вероятностью будет связана ссылка.

/sbin/ldconfig -p | grep mysql | cut -d\> -f2

Однако одно предостережение заключается в том, что, поскольку большинство приложений связываются с помощью gcc -lmysqlclient, они предпочтут файл в ldconfig, указанный как libmysqlclient.so, а не .so.15 или что-то еще. Так что лично я бы предположил, что первый libmysqlclient.so правильный.

Какая библиотека общих объектов используется, зависит от среды пользователя и исполняемого двоичного файла. если ты su - USER пользователю, который запускает двоичный файл, а затем выполните команду ldd MYSQLBINARY | grep mysqlclient это определит, какая библиотека mysqlclient будет использоваться.

По умолчанию в большинстве систем Linux / usr / lib (используется для двоичных файлов x86) и / usr / lib64 (используется для двоичных файлов x86_64).

Кстати, бег locate libmysqlclient.so чтобы получить список всех общих объектов, установленных в системе (хотя, вероятно, не будет сообщать о файлах .so, установленных в пользовательских путях).

Если вы знаете имя пакета, почему бы не указать его содержимое и не найти его с помощью команды grep?

В Redhat что-то вроде ...

rpm -ql mysql | grep libmysql

Помните, что используемый таким образом может даже не находиться в / usr / lib или /usr/lib64. Иногда эти вещи также находятся в / usr / local / lib или под ним, в зависимости от того, как все было скомпилировано.

Я уверен, что есть абсолютно надежный метод определения. Однако можно сделать несколько чертовски хороших догадок.