我将一个 .deb 包转换为 PKGBUILD,用于没有源代码的程序。问题是这个二进制文件会查找 Ubuntu 16.10 上可用的一些共享库,这些共享库在 Arch 上的路径不同。这是我在ldd
二进制文件上运行时的部分输出:
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
告诉这个程序在 Arch 上哪里可以找到库的最好方法是什么?
答案1
它们在同一个目录中。但其中一些不存在在 Arch 上 – 或者至少不是您的程序所需的确切 .soname。
Boost 是一个问题。在 Arch 中它已经是 1.64 版本了,不幸的是它没有任何 ABI 稳定性 - 换句话说,使用 Boost 的程序必须为每个版本重新编译。(这就是“.so”后面的数字发生变化的原因。)
因此,首先您需要为 Boost 1.61 制作一个包,其方式与各种现有的“旧版本”包(例如 glew1.10)类似。它只包含 .so 文件,不包含任何其他内容,以便可以与最新版本并排安装。
(并且,您不能简单地符号链接或重命名不同的版本——.soname 的改变是有原因的。)
尽管 cURL 没有这样的版本问题(它已经使用 .so.4 很长时间了),但它有三个变体– Arch 仅提供 OpenSSL 和 GnuTLS。因此,您再次需要制作一个针对 NSS 库编译 cURL 的包,以便获取 libcurl-nss。您可以使用“curl-gnutls”包作为基础。
最后一个库 xalan-c 根本没有安装在您的系统上。