首页 > 解决方案 > Gpg2 库依赖树

问题描述

Gpg2 使用的库是否有一些依赖关系树或图,例如libgpg-errorlibassuan &c.

或者另一种方法来确定在其中一个获得新版本后我需要重新编译哪些?例如 libgpg-error 是,我理解,非常基本的一个,所以如果它得到升级,也许所有其他的都应该重新编译?

我有时会在升级库后遇到麻烦,因为它试图链接旧的、已删除的库版本(我有一个非标准的目录结构),并因“找不到库”而崩溃'。经过一些(不是很彻底)的研究后,我相信这是由于从升级之前构建的其他库中获取特定库版本的信息造成的。

一个例子:我最近将 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。然而,当其他一些库被编译时,它们更早出现。

标签: gnupg

解决方案


似乎没有答案,所以我至少尝试查看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在评论中的建议进行编辑。)


推荐阅读