gnupg - Gpg2 库依赖树
问题描述
Gpg2 使用的库是否有一些依赖关系树或图,例如libgpg-error
或libassuan &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。然而,当其他一些库被编译时,它们更早出现。
解决方案
似乎没有答案,所以我至少尝试查看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在评论中的建议进行编辑。)
推荐阅读
- javascript - 为什么我不能为 onclick 事件调用一个类?
- python - 如果使用 Tensorflow 的 ObjectDetection API,需要 NormalizeImage?
- apache-spark - 来自 Apache Kafka 的 Spark Streaming
- c# - 将 EF 属性分配给变量时出现“对象引用未设置为对象的实例”异常
- javascript - 如何重新启动 Jquery 事件,避免每个事件重复?
- c# - Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册并且 Visual Studio 中无法识别的数据库格式 accdb
- sqlalchemy - 在运行时为 SQLAlchemy 的 EncryptedType 指定一个密钥
- swift - 从未使用过不可变值“rate”的初始化
- typescript - 使用 Jest 模拟对象数组
- javascript - 以 HTML 格式显示 API 响应数据