register.o: undefined reference to symbol 'gpg_strerror'编译错误的解法

本文介绍了在编译libgcrypt过程中遇到找不到gpg-error接口的问题及其解决方案,通过修改Makefile中的LDFLAGS来指定正确的库路径。同时分享了在Linux环境下编译时常见问题的排查方法以及使用.rpm包安装软件的技巧。

在编译libgrcypt的时候找不到gpg-error的接口...

解法:

修改Makefile:LDFLAGS=-L/库路径

tests/Makefile也要做同样修改...

 

以前解过了的,今天又找了半天,记录下来...备忘...

 

在linux编译的过程中,很多问题都是由于configure的问题,所以在对linux的source code做编译的时候着重注意configure和生成的Makefile文件...据经验,能解决至少50%的问题...

 

在fedora上,rpm安装软件包的时候,可以使用--prefix来指定目录安装,貌似也可以使用--relocate参数来指定...但是,不是所有的fedora的安装包都能使用这些参数...

 

 

 

在使用.src.rpm包进行安装的时候,会在rpmbuild的目录下的SOURCE里面得到相应的source code的内容...

也就是实现了.src.rpm和tar包的互相转换的...

<think>我们面临三个主要问题: 1. apt-key deprecated警告:Ubuntu 22.04开始,apt-key已被标记为废弃,需要将GPG密钥转换为可信文件格式。 2. curl连接错误:OpenSSL SSL_connect: Connection reset by peer,可能是网络问题或SSL证书验证失败。 3. gpg无有效OpenPGP数据:使用gpg添加密钥时提示“no valid OpenPGP data found”,可能是密钥服务器问题或密钥损坏。 我们将分步骤解决这三个问题。 ### 1. 解决`apt-key deprecated`警告 传统添加APT源密钥的方式: ```bash wget -qO- https://example.com/key.asc | sudo apt-key add - ``` 现在推荐将密钥转换为`.asc`文件并放入`/etc/apt/trusted.gpg.d/`(但注意,官方建议使用`signed-by`方式指定密钥) **正确步骤**: 1. 下载密钥并保存为文件: ```bash sudo wget -O /usr/share/keyrings/example-key.asc https://example.com/key.asc ``` 2. 将密钥转换为GPG格式(如果下载的是ASCII格式): ```bash sudo gpg --dearmor -o /usr/share/keyrings/example-key.gpg /usr/share/keyrings/example-key.asc ``` 如果已经是二进制格式,则无需转换。 3. 在源文件中使用`signed-by`指定密钥: ```bash echo "deb [signed-by=/usr/share/keyrings/example-key.gpg arch=amd64] https://example.com/repo stable main" | sudo tee /etc/apt/sources.list.d/example.list ``` ### 2. 解决curl连接错误:`OpenSSL SSL_connect: Connection reset by peer` 可能原因: - 目标服务器中断连接(防火墙、服务器问题) - 本地网络问题 - SSL证书验证失败 **解决步骤**: 1. **检查网络连接**: ```bash ping example.com ``` 如果不通,检查网络配置。 2. **跳过证书验证(临时测试)**: ```bash curl -k https://example.com ``` 如果成功,说明是证书问题。 3. **更新CA证书**: ```bash sudo apt update sudo apt install --reinstall ca-certificates ``` 4. **设置SSL证书路径**(参考引用[1]): 如果使用自签名证书,可以指定CA证书路径: ```bash curl --cacert /path/to/ca-bundle.crt https://example.com ``` 或设置环境变量(不推荐永久设置): ```bash export GIT_SSL_CAPATH=/etc/ssl/certs # 引用[1]提到类似环境变量 ``` 5. **检查系统时间**: SSL证书验证依赖系统时间,如果时间不正确,会导致错误: ```bash date ``` 如果不正确,使用`ntpdate`或`timedatectl`同步时间。 ### 3. 解决gpg无有效OpenPGP数据问题 当运行`gpg --import somefile`或`gpg --keyserver keyserver.ubuntu.com --recv-keys KEYID`时出现错误。 **解决步骤**: 1. **检查密钥文件是否有效**: ```bash cat keyfile.asc ``` 正常应包含`-----BEGIN PGP PUBLIC KEY BLOCK-----`。 2. **更换密钥服务器**: ```bash gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys KEYID ``` 尝试其他服务器,如: ```bash gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys KEYID ``` 3. **使用HTTP协议获取**(某些环境UDP被防火墙阻断): ```bash gpg --keyserver hkps://keys.openpgp.org --recv-keys KEYID ``` 4. **手动下载并导入**: ```bash wget -O - https://example.com/key.asc | gpg --import ``` 5. **检查代理设置**: 如果使用代理,设置环境变量: ```bash export http_proxy="http://proxy-ip:port" export https_proxy="http://proxy-ip:port" ``` 6. **更新GPG**: ```bash sudo apt update sudo apt install --reinstall gnupg2 ``` ### 综合诊断流程 如果问题依然存在,建议: - 检查防火墙设置(包括云服务器的安全组) - 使用`tcpdump`或`wireshark`分析网络包 - 查看系统日志:`journalctl -xe` ### 相关问题 §§相关问题§§ 1. 如何验证下载的GPG密钥指纹是否正确? 2. 如何为APT仓库创建自己的GPG密钥? 3. 如何配置系统级的HTTP/HTTPS代理? 4. 如何修复Ubuntu中的损坏软件包? </think>以下是针对 `apt-key deprecated` 警告、curl 连接错误和 GPG 无有效 OpenPGP 数据的完整解决方案: --- ### 问题诊断与解决流程 ```mermaid graph TB A[三大问题] --> B[apt-key deprecated] A --> C[curl SSL_connect error] A --> D[gpg no valid OpenPGP] B --> E[密钥存储迁移] C --> F[证书修复与验证] D --> G[密钥获取方式优化] E & F & G --> H[系统修复] ``` --- ### 一、解决 `apt-key deprecated` 警告 这是 Ubuntu 22.04+ 的架构变更,需迁移密钥存储位置: 1. **查找现有密钥**: ```bash sudo apt-key list | grep -B1 'expired' # 检查过期密钥 ``` 2. **迁移密钥到新位置**: ```bash sudo apt-key export KEY_ID | sudo gpg --dearmor -o /usr/share/keyrings/custom.gpg ``` - 将 `KEY_ID` 替换为实际密钥ID(如 `3B4FE6ACC0B21F32`) 3. **更新源文件**: ```bash sudo nano /etc/apt/sources.list.d/example.list ``` 修改为: ```conf deb [signed-by=/usr/share/keyrings/custom.gpg] https://repo.example.com stable main ``` 4. **删除旧密钥**: ```bash sudo apt-key del KEY_ID # 仅在所有迁移完成后执行[^1] ``` --- ### 二、修复 curl `SSL_connect: Connection reset by peer` 通常由证书损坏或网络策略引起: #### 方案1:修复证书链 1. 更新 CA 证书: ```bash sudo apt install --reinstall ca-certificates sudo update-ca-certificates -f ``` 2. 强制 curl 使用系统证书: ```bash curl --cacert /etc/ssl/certs/ca-certificates.crt URL ``` #### 方案2:检查 OpenSSL(参考引用[2]) 1. 验证 OpenSSL 版本: ```bash openssl version -a ``` 2. 若需重新编译(仅当系统 OpenSSL 损坏时): ```bash cd openssl-1.1.0l/ ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl make && sudo make install ``` #### 方案3:网络诊断 ```bash openssl s_client -connect repo.example.com:443 -servername repo.example.com # 若返回 'CONNECTED' 但无证书详情,说明防火墙拦截 ``` --- ### 三、解决 GPG `no valid OpenPGP data found` #### 方案1:直接下载密钥 ```bash curl -sSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xKEY_ID | gpg --dearmor > key.gpg sudo mv key.gpg /usr/share/keyrings/ ``` #### 方案2:使用备用协议 ```bash gpg --keyserver hkps://keys.openpgp.org --recv-keys KEY_ID ``` #### 方案3:手动导入 1. 获取密钥指纹: ```bash wget -qO- URL | gpg --dry-run --import - ``` 2. 若输出 `gpg: key KEY_ID: public key imported` 则手动保存为 `.asc` 文件后: ```bash sudo gpg --no-default-keyring --keyring /usr/share/keyrings/custom.gpg --import key.asc ``` --- ### 完整验证流程 ```bash # 1. 测试curl连接 curl -v https://repo.example.com # 2. 验证GPG密钥 gpg --list-keys --keyring /usr/share/keyrings/custom.gpg # 3. 更新软件源 sudo apt update # 应不再出现警告 ``` --- ### 关键配置文件位置 | 类型 | 新路径 | 旧路径 | |-------------|--------------------------------|---------------------| | GPG 密钥 | `/usr/share/keyrings/*.gpg` | `/etc/apt/trusted.gpg.d/` | | CA 证书 | `/etc/ssl/certs/` | `/usr/local/openssl/certs/` | | APT 源文件 | `/etc/apt/sources.list.d/*.list` | `/etc/apt/sources.list` | > **注意**:若使用企业防火墙,可能需要配置全局代理: > ```bash > echo 'Acquire::http::Proxy "http://proxy:port";' | sudo tee /etc/apt/apt.conf.d/99proxy > ``` --- ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值