Encontre o local do arquivo libmysqlclient.so.X em ambientes Linux

7

Estou montando um script que requer o conhecimento do arquivo libmysqlclient.so. [15 | 16 | 18] .so. Geralmente está localizado em / usr / lib /, / usr / lib64 / ou em um subdiretório mysql / dos diretórios acima mencionados.

Eu tentei algumas coisas. Primeiro de tudo, algumas vezes a localização pode ser encontrada em um arquivo mysql em /etc/ld.so.conf.d/mysql*, mas isso não tem sido o caso em muitos servidores.

Outra possibilidade é pesquisar os diretórios acima para esses arquivos. Eu vou saber qual versão do MySQL está sendo usada, então eu posso procurar o arquivo .so apropriado, mas infelizmente muitas pessoas parecem ter vários .so instalados. Por exemplo, ambos podem existir:

  • /usr/lib/libmysqlclient.so.15

  • /usr/lib64/libmysqlclient.so.15

Nesta situação, não tenho certeza de qual arquivo .so está sendo usado.

Existe alguma maneira de dizer onde o libmysqlclient.so apropriado está instalado?

    
por wrangler 01.11.2011 / 06:16

4 respostas

7

Isso lhe dará todos os arquivos libmysql reconhecidos pelo vinculador. O mais alto da lista tem a prioridade mais alta e é mais provável que seja vinculado.

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

Uma ressalva é que como a maioria dos aplicativos faz um gcc -lmysqlclient, eles favorecem um arquivo no ldconfig listado como libmysqlclient.so ao invés de .so.15 ou qualquer outro. Então, pessoalmente, eu diria que o primeiro libmysqlclient.so é o correto.

    
por 01.11.2011 / 17:21
3

Qual biblioteca de objetos compartilhados é usada depende do ambiente do usuário e do binário que é executado. Se você su - USER para o usuário que está executando o binário e, em seguida, execute o comando ldd MYSQLBINARY | grep mysqlclient que determinará qual biblioteca mysqlclient será usada.

Por padrão, na maioria dos sistemas Linux, / usr / lib (usado para binários x86) e / usr / lib64 (usado para binários x86_64 bits).

Btw, executando locate libmysqlclient.so para obter uma lista de todos os objetos compartilhados que estão instalados no sistema (provavelmente não relatarão os arquivos .so instalados nos caminhos do usuário).

    
por 01.11.2011 / 06:39
1

Lembre-se de que o modo que está sendo usado pode nem estar em / usr / lib ou /usr/lib64..as vezes essas coisas residem em / usr / local / lib, dependendo de como as coisas foram compiladas.

Tenho certeza de que existe um método totalmente infalível de fazer a determinação. No entanto, é possível fazer algumas suposições boas.

    
por 01.11.2011 / 07:14
0

Se você souber o nome do pacote, por que não listar o conteúdo do pacote e o grep para ele?

No Redhat, algo como ...

rpm -ql mysql | grep libmysql
    
por 01.11.2011 / 17:12