Gpg2库依赖树

3

是否有Gpg2所使用的库(例如libgpg-errorlibassuan &c.)的依赖树或图表?

或者有没有其他方法可以确定在其中一个版本更新后需要重新编译哪些版本?例如,我了解到libgpg-error是相当基础的一个库,因此如果它被升级,可能所有其他库都应该重新编译?

有时,当我升级一个库后,我不能编译新版本的Gpg2,因为它试图链接已经删除的旧版本库(我对这些库有非标准的目录结构),并且会崩溃并显示“找不到库”的错误信息。经过一些不是特别彻底的研究后,我认为这是由于从已经构建的其他库中提取特定库版本的信息而导致的。

例如:我最近将libgpg-error升级到1.32。今天我尝试(并失败了(必须手动修复))编译Gpg 2.2.10。

失败的命令如下(简写):

/usr/local/bin/gcc -std=gnu99 ... \
-I/usr/local/libgpg-error-1.31/include \
-I/usr/local/libgpg-error-1.25/include \
-I/usr/local/libgpg-error-1.31/include \
-I/usr/local/libgpg-error-1.32/include \
-o dirmngr dirmngr.o server.o crlcache.o crlfetch.o certcache.o ... \
../common/libcommonpth.a -lresolv  \
-L/usr/local/libgpg-error-1.31/lib -lgpg-error \
-L/usr/local/libgpg-error-1.31/lib -lgpg-error \
-L/usr/local/libgpg-error-1.25/lib -lgpg-error \
...

请注意,它试图包含libgpg-error头文件的版本1.25、1.31和1.32,并链接libgpg-error.so的版本1.25和1.31(但不是1.32)。虽然除了当前版本1.32外,磁盘上已经没有这些版本,但在其他一些库编译时它们曾经存在过。

1个回答

2

看起来没有答案可用,所以我至少尝试查看了各个库的configure脚本,这是我想出来的(非常不保证)一些依赖关系图和建议的编译顺序:

level 0
| libgpg-error
| nPth
level 1
| libgcrypt (libgpg-error)
| libksba (libgpg-error)
| libassuan (libgpg-error)
level 2
| ntbTLS (libgpg-error, libgcrypt, libksba)
| pinentry (libgpg-error, libassuan)
level N
| gpg2 (libgpg-error, libgcrypt, libassuan, libksba, nPth) [pinentry, ntbTLS]
level N+1
| GPGME (libgpg-error, libassuan)
level N+2
| GPA (libgpg-error, libassuan, GPGME)

(根据Ben的建议进行编辑。)


我可以确认按照这个顺序重新编译解决了原问题。 - mpts.cz
这基本上是正确的,除了 GPGME 应该在 GPG 之后安装,在 GPA 之前安装。在安装 GPGME 之前安装 GPG 只能在已经安装了某个版本的 GPG 的系统上工作(这适用于大多数 POSIX 系统)。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接