编译 GnuPG 将 gpg2 链接到 /lib 而不是 /usr/local/lib/

编译 GnuPG 将 gpg2 链接到 /lib 而不是 /usr/local/lib/

有时我必须在服务器上安装新的软件包。如果幸运的话,我可以找到 RPM,否则,我只能碰壁并尝试编译软件包。

这次我编译 GnuPG 以获得版本 2.1.15。因此我下载了所有依赖库,运行 configure && make install,最后我对 gnupg-2.1.15 包本身重复上述操作,一切顺利,make 将所有内容(包括库和二进制文件)放入 /usr/local/。我感到很幸运,于是检查了版本:

$ /usr/local/bin/gpg2 --version
gpg: Fatal: libgcrypt is too old (need 1.7.0, have 1.6.6)

哎呀。发生了什么事,所以我检查了链接的库:

$ ldd /usr/local/bin/gpg2
linux-vdso.so.1 (0x00007fff15db4000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007fcab5431000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fcab521d000)
libassuan.so.0 => /lib64/libassuan.so.0 (0x00007fcab5009000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcab4c47000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcab4a43000)
/lib64/ld-linux-x86-64.so.2 (0x00005615f5c77000)

呃,旧的内置系统库已链接。我很少编译软件,所以我被困在这里试图弄清楚如何通过 configure(或其他?)告诉 gcc 链接刚刚安装在 /usr/local/lib/ 中的依赖库

这是我针对 gnupg-2.1.15 的配置命令:

./configure --prefix=/usr/local --with-libgpg-error-prefix=/usr/local/\
--with-libgcrypt-prefix=/usr/local --with-libassuan-prefix=/usr/local\
--with-ksba-prefix=/usr/local --with-npth-prefix=/usr/local

在 Fedora 24 上运行此程序,并安装最新更新和内核以及 gcc 6.2.1。

感谢您花时间考虑我的问题。

答案1

看起来您需要该程序的特定版本及其依赖库,或者您正在试验您的系统。

您可以使用环境变量LD_LIBRARY_PATH来修改链接器的搜索路径,以便找到新库并使用它代替旧库。下面是提供更多相关细节。

您可以export LD_LIBRARY_PATH=/usr/local/path/to/lib/directory在执行程序之前进行尝试。要使此操作永久生效,您可以修改ldconfig搜索路径(通常是 下的文件/etc/ld.so.conf.d),然后调用ldconfig以更新缓存。

相关内容