Minha ferramenta de software tem algumas dependências externas. Estou distribuindo-o como um pacote conda para linux64 com dependências pré-compiladas, incluindo bibliotecas compartilhadas. Infelizmente eu não sei como reconhecer as bibliotecas do sistema das específicas do software. Acho que distribuir libs como libc
não é necessário e deve ser evitado, porque diferentes distribuições do Linux podem ter versões específicas de algumas bibliotecas do sistema (mas eu não sou especialista, então isso pode ser uma afirmação errada).
Estou usando este oneliner simples para exportar bibliotecas compartilhadas ( source ):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
Por exemplo, estas são as bibliotecas compartilhadas para o software Tesseract:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
Como você pode ver, apenas libtesseract.so.4
e liblept.so.5
são bibliotecas específicas de software (não encontradas porque não estão em LD_LIBRARY_PATH
).
Então, há alguma maneira de reconhecer as bibliotecas compartilhadas do sistema? Posso verificar se elas estão em /lib
, mas isso é sempre verdade? Existem apenas bibliotecas do sistema, então elas não podem estar em outro lugar?