Я собираю сценарий, который требует знания файла 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?
Это даст вам все файлы 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 или под ним, в зависимости от того, как все было скомпилировано.
Я уверен, что есть абсолютно надежный метод определения. Однако можно сделать несколько чертовски хороших догадок.