
Ich habe ein .deb-Paket für ein Programm, das ohne Quellen geliefert wird, in PKGBUILD konvertiert. Das Problem ist, dass diese Binärdatei nach einigen gemeinsam genutzten Bibliotheken sucht, die unter Ubuntu 16.10 verfügbar sind, aber unter Arch andere Pfade haben. Dies ist ein Teil der Ausgabe, wenn ich ldd
die Binärdatei ausführe:
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
Wie kann ich diesem Programm am besten mitteilen, wo es Bibliotheken auf Arch findet?
Antwort1
Sie befinden sich im selben Verzeichnis. Aber einige von ihnenexistiert nichtauf Arch – oder zumindest nicht die genaue .soname-Datei, die Ihr Programm benötigt.
Boost ist ein Problem. In Arch ist es bereits in der Version 1.64 und hat leider keine ABI-Stabilität – mit anderen Worten, Programme, die Boost verwenden, müssen für jede Version neu kompiliert werden. (Das ist der Grund, warum sich die Nummern nach „.so“ ändern.)
Sie müssen also zunächst ein Paket für Boost 1.61 erstellen, ähnlich wie bei verschiedenen vorhandenen Paketen für „alte Versionen“ (wie z. B. glew1.10). Es enthält nur die .so-Dateien, aber nichts anderes, sodass es parallel zur neuesten Version installiert werden kann.
(Und nein, Sie können nicht einfach einen symbolischen Link zu einer anderen Version erstellen oder diese umbenennen – die .soname-Datei ändert sich aus einem bestimmten Grund.)
Obwohl cURL keine derartigen Probleme mit der Versionierung hat (es liegt schon seit langem bei .so.4), hat es dreiVarianten– Arch stellt nur OpenSSL und GnuTLS bereit. Sie müssen also erneut ein Paket erstellen, das cURL mit der NSS-Bibliothek kompiliert, um libcurl-nss zu erhalten. Sie können das Paket „curl-gnutls“ als Basis verwenden.
Die letzte Bibliothek, xalan-c, ist auf Ihrem System einfach nicht installiert.