如何从源代码构建 GnuPG (gpg);符号查找错误:未定义符号:gpgrt_set_confdir,版本 GPG_ERROR_1.0

如何从源代码构建 GnuPG (gpg);符号查找错误:未定义符号:gpgrt_set_confdir,版本 GPG_ERROR_1.0

我的资源:

  1. https://unix.stackexchange.com/a/175/114401
  2. 源代码:https://gnupg.org/download/index.html

我当前的版本gpg是:

$ gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/gabriel/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

我想构建并安装 2.3.7。我在使用 Ubuntu 20.04。我能看到的唯一方法是从源代码执行此操作。

我尝试在 Ubuntu 20.04 上从源代码构建和安装 gpg,就像这样(我获得了所有下载链接这里):

# verify version before the update
gpg --version

# 1. Build & install dependencies (needed libraries)

wget https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.45.tar.bz2
wget https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.10.1.tar.bz2
wget https://gnupg.org/ftp/gcrypt/libksba/libksba-1.6.0.tar.bz2
wget https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.5.tar.bz2
wget https://gnupg.org/ftp/gcrypt/ntbtls/ntbtls-0.3.1.tar.bz2
wget https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2
wget https://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.2.0.tar.bz2

tar jxvf libgpg-error-*.bz2
tar jxvf libgcrypt-*.bz2
tar jxvf libksba-*.bz2
tar jxvf libassuan-*.bz2
tar jxvf ntbtls-*.bz2
tar jxvf npth-*.bz2
tar jxvf pinentry-*.bz2

cd libgpg-error-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd libgcrypt-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd libksba-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd libassuan-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd ntbtls-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd npth-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

cd pinentry-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

# 2. Build & install gpg

wget https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.3.7.tar.bz2
tar jxvf gnupg-*.bz2
cd gnupg-!(*.bz2)
time (./configure && make && sudo make install) && cd ..

# verify the version after the update
gpg --version

扫描输出时我没有看到任何错误(尽管有很多东西需要查看),并且如果有错误,符号应该停止,而不是在构建和安装后&&使用 cd 进行备份。cd ..

但是,gpg --version仍然显示2.2.19,而不是2.3.7。为什么?

手动尝试运行它也会失败并出现以下错误:

$ gnupg-2.3.7/bin/gpg --version
gnupg-2.3.7/bin/gpg: symbol lookup error: gnupg-2.3.7/bin/gpg: undefined symbol: gpgrt_set_confdir, version GPG_ERROR_1.0

为什么?直接这样运行应该可以。


更新:这里有我找到的一些参考资料和资源,它们可能会对我继续尝试自己解决这个问题有所帮助:

  1. 谷歌搜索“从头开始构建 gpg”
    1. https://njh.eu/gpg- 看起来非常有希望!我需要尝试一下。

答案1

我遇到了同样的问题,放弃了从源代码构建,只是安装了克利奥帕特拉并更新了 GnuPG

sudo apt-get update
sudo apt-get install kleopatra

答案2

两个问题:

  1. 您从中下载的版本https://gnupg.org/ftp/gcrypt安装到 /usr/local/... 而您的原始版本位于 /usr/... 中。这可能导致标头/库不匹配。我必须先删除所有要替换的库和 gpg 包,然后再进行构建。
  2. 您需要按照以下顺序构建
  • npth
  • libgpg 错误
  • libgcrypt、libksba、libassuan(ntbtls、pinentry 是可选的)

相关内容