
Converti um pacote .deb em PKGBUILD para um programa que vem sem fontes. O problema é que este binário procura algumas bibliotecas compartilhadas disponíveis no Ubuntu 16.10 que possuem caminhos diferentes no Arch. Isso faz parte da saída quando executo ldd
o binário:
libcurl-nss.so.4 => not found
liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0x00007f460d645000)
libboost_thread.so.1.61.0 => not found
libboost_system.so.1.61.0 => not found
libboost_filesystem.so.1.61.0 => not found
libboost_program_options.so.1.61.0 => not found
libxalan-c.so.111 => not found
Qual é a melhor maneira de informar a este programa onde encontrar bibliotecas no Arch?
Responder1
Eles estão no mesmo diretório. Mas alguns delesnão existeno Arch – ou pelo menos não o .soname exato que seu programa precisa.
O impulso é um problema. No Arch já está na versão 1.64, e infelizmente não possui estabilidade de ABI – ou seja, programas que utilizam Boost devem ser recompilados para cada versão. (Essa é a razão pela qual os números após a mudança ".so".)
Então, primeiro você precisaria criar um pacote para o Boost 1.61, de maneira semelhante a vários pacotes de "versão antiga" existentes (como glew1.10, por exemplo). Ele teria apenas os arquivos .so, mas nenhuma das outras coisas, para que pudesse ser instalado lado a lado com a versão mais recente.
(E não, você não pode simplesmente criar um link simbólico ou renomear uma versão diferente – o .soname muda por um motivo.)
Embora cURL não tenha problemas com controle de versão (está em .so.4 há muito tempo), ele tem trêsvariantes– Arch fornece apenas OpenSSL e GnuTLS. Então, novamente, você precisaria criar um pacote que compila cURL na biblioteca NSS para obter libcurl-nss. Você pode usar o pacote "curl-gnutls" como base.
A última biblioteca, xalan-c, simplesmente não está instalada no seu sistema.