Copiar arbitrariamente arquivos .so
para diretórios do sistema não é uma boa prática, pois copiará as bibliotecas compartilhadas para o sistema de destino sem o reconhecimento do Pacote de Controle do Sistema, portanto, pode causar conflitos com o software instalado e pode não ter outras dependências não é possível mapear manualmente.
Sua milhagem pode variar, mas existem três abordagens diferentes que você pode procurar:
O primeiro é tentar instalar os pacotes de software necessários que contêm as versões compatíveis das bibliotecas na distro de destino. Isso requer raiz, porém, que você indicou como não sendo uma opção. Em qualquer caso, se isso se tornar uma opção em algum momento, aqui estão algumas dicas para ajudar nessa abordagem: ldd you_executable_file
mostra as dependências da biblioteca de um programa específico. Você pode procurar por pacotes na distro que forneçam tais bibliotecas (no Fedora, por exemplo, você pode usar yum provides path_to_required_file
para lhe dizer quais pacotes precisam ser instalados.
O segundo está tentando produzir um executável agnóstico de distribuição. Para tal, você deve usar bibliotecas estáticas ao compilar seu software. Geralmente, você pode encontrar versões compartilhadas (.so) e estáticas (.a) da maioria das bibliotecas no Linux. Você deve usar as versões estáticas e vinculá-las como se fossem arquivos de objetos (.o). O lado negativo é que o binário gerado será muito maior do que ao usar bibliotecas compartilhadas porque ele carregará todo o código da biblioteca em si. Além disso, não será sensível a correções de bugs nas bibliotecas instaladas posteriormente no sistema (isso exigirá a recompilação de seu programa com a nova versão corrigida).
A terceira opção é realmente copiar as bibliotecas para o novo sistema (mesmo não sendo raiz) em um diretório sob seu diretório home e usar as variáveis de ambiente LD_LIBRARY_PATH
e / ou LD_PRELOAD
para forçar o vinculador dinâmico a usar seu cópias das bibliotecas. Observe que você pode precisar copiar muitas bibliotecas (que você descobrirá usando o comando ldd
que mencionei acima). LD_LIBRARY_PATH
diz ao vinculador dinâmico para procurar caminhos adicionais para encontrar bibliotecas ausentes. LD_PRELOAD
força o vinculador dinâmico a pré-carregar uma versão específica de uma biblioteca sobrepondo a versão de todo o sistema.