
ソースのないプログラムのために、.deb パッケージを PKGBUILD に変換しました。問題は、このバイナリが、Arch とは異なるパスを持つ Ubuntu 16.10 で利用可能な共有ライブラリを探すことです。これは、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 には 1 つの問題があります。Arch ではすでにバージョン 1.64 になっていますが、残念ながら ABI の安定性がありません。つまり、Boost を使用するプログラムはバージョンごとに再コンパイルする必要があります。(これが、「.so」の後の数字が変わる理由です。)
したがって、まず、既存のさまざまな「旧バージョン」パッケージ (たとえば glew1.10 など) と同様の方法で、Boost 1.61 用のパッケージを作成する必要があります。これには .so ファイルのみ含まれ、他のものは含まれないため、最新バージョンと並行してインストールできます。
(また、単に別のバージョンにシンボリックリンクしたり名前を変更したりすることはできません。.soname が変更されるのは理由があるからです。)
cURLはバージョン管理に関してそのような問題はありませんが(長い間.so.4でした)、3つの問題があります。変種– Arch は OpenSSL と GnuTLS のみを提供しています。したがって、libcurl-nss を取得するには、NSS ライブラリに対して cURL をコンパイルするパッケージを作成する必要があります。ベースとして「curl-gnutls」パッケージを使用できます。
最後のライブラリ xalan-c がシステムにインストールされていないだけです。