
Convertí un paquete .deb a PKGBUILD para un programa que viene sin fuentes. El problema es que este binario busca algunas bibliotecas compartidas disponibles en Ubuntu 16.10 que tienen diferentes rutas en Arch. Esto es parte del resultado cuando ejecuto ldd
el binario:
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
¿Cuál es la mejor manera de decirle a este programa dónde encontrar bibliotecas en Arch?
Respuesta1
Están en el mismo directorio. Pero algunos de ellosno existeen Arch, o al menos no el .soname exacto que necesita su programa.
El impulso es un problema. En Arch ya está en la versión 1.64 y desafortunadamente no tiene estabilidad ABI; en otras palabras, los programas que usan Boost deben recompilarse para cada versión. (Esa es la razón por la que cambian los números después del ".so").
Entonces, primero necesitaría crear un paquete para Boost 1.61, de manera similar a varios paquetes de "versión anterior" existentes (como glew1.10, por ejemplo). Solo tendría los archivos .so pero nada del resto, de modo que podría instalarse junto con la última versión.
(Y no, no puedes simplemente crear un enlace simbólico o cambiar el nombre de una versión diferente; el .soname cambia por una razón).
Aunque cURL no tiene tales problemas con el control de versiones (ha estado en .so.4 durante mucho tiempo), tiene tresvariantes– Arch sólo proporciona los OpenSSL y GnuTLS. Entonces, nuevamente, necesitaría crear un paquete que compile cURL con la biblioteca NSS para obtener libcurl-nss. Puedes utilizar el paquete "curl-gnutls" como base.
La última biblioteca, xalan-c, simplemente no está instalada en su sistema.