Gpg2使用的库是否有一些依赖树或图,例如libgpg-error
或libassuan &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。但是,当其他一些库被编译时,它们就已经存在了。
答案 0 :(得分:1)
似乎没有答案,所以我至少尝试研究各个库的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 在他的评论中建议编辑。)