Вопрос: Найти местоположение файла 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. Например, оба могут существовать:

  • /usr/lib/libmysqlclient.so.15

  • /usr/lib64/libmysqlclient.so.15

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

Нужно ли вообще указывать, где установлен соответствующий libmysqlclient.so?


7
2017-11-01 05:16


Источник


Можете ли вы уточнить, что вы пытаетесь выполнить? - Andrew Case


Ответы:


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

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

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


7
2017-11-01 16:21





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

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

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


3
2017-11-01 05:39





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

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


1
2017-11-01 06:14





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

В Редхате, что-то вроде ...

rpm -ql mysql | grep libmysql

0
2017-11-01 16:12