Estamos usando uma biblioteca que precisa ser carregada libssl
em uma versão 1.0.*
. Não funciona com libssl.so.1.1
. Precisamos que funcione em qualquer sistema Linux.
Tentamos carregar várias versões e isso geralmente funciona, mas no sistema de um cliente há apenas o seguinte:
/usr/lib64/libssl.so.1.1.0g
/usr/lib64/libssl.so.10
/usr/lib64/libssl.so.1.0.2m
/usr/lib64/libssl.so.1.1
Estamos tentando carregar libssl.so.1.0
e libssl.so.1.0.2
, mas ele não encontra libssl.so.1.0.2m
por causa do " m
" à direita.
Gostaria de saber qual é o esquema de nomenclatura de libssl, se houver?
Realmente precisamos fornecer nossa própria versão ou existe uma maneira melhor?
Devemos fazer um loop de libssl.so.1.0.2z
baixo para libssl.so.1.0.2a
? Devemos verificar o caminho da biblioteca manualmente?
Não tenho certeza de como você está abrindo
libssl
- presumodlopen()
?Pesquisar uma lista codificada de caminhos de diretório para uma biblioteca parece bastante frágil - seria melhor deixar o vinculador dinâmico fazer o trabalho para você.
ldconfig -p
Talvez vale a pena tentar analisar a saída ? Em um sistema Debian, vejo o seguinte:Em um sistema RHEL 7.4:
Observe que no sistema Debian a biblioteca está em
/usr/lib/x86_64-linux-gnu
, enquanto no sistema RHEL está em/lib64
(observe também os nomes de bibliotecas amplamente variáveis). A menos que você use algo como a saída deldconfig
, você mesmo terá que pesquisar todos esses caminhos específicos de distribuição se planeja "trabalhar em qualquer sistema Linux". É certo que os caminhos do diretório estão listados,/etc/ld.so.conf
mas acho que usarldconfig
provavelmente ainda é mais fácil.