You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenSSL函数的nwipe项目在Ubuntu编译失败但Fedora成功

nwipe编译跨发行版差异问题:Fedora成功Ubuntu链接失败

问题描述

编译nwipe项目时,Fedora系统无报错完成构建,但相同OpenSSL版本(≥3.0.2)的Ubuntu机器出现链接错误,两台系统均已正确安装libdev-ssl依赖包。

Fedora编译成功的关键命令片段:

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -MT aes/aes_ctr_prng.o -MD -MP -MF $depbase.Tpo -c -o aes/aes_ctr_prng.o aes/aes_ctr_prng.c &&\
mv -f $depbase.Tpo $depbase.Po
...
gcc -g -O2 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -lcrypto -o nwipe nwipe.o ... -lparted -lpthread -lpanel -lncurses -ltinfo -lconfig

Ubuntu上的链接错误:

/usr/bin/ld: aes/aes_ctr_prng.o: in function `aes_ctr_prng_init':
/tmp/nwipe/src/aes/aes_ctr_prng.c:22: undefined reference to `AES_set_encrypt_key'
/usr/bin/ld: aes/aes_ctr_prng.o: in function `aes_ctr_prng_genrand_uint32':
/tmp/nwipe/src/aes/aes_ctr_prng.c:41: undefined reference to `AES_encrypt'
/usr/bin/ld: /tmp/nwipe/src/aes/aes_ctr_prng.c:41: undefined reference to `CRYPTO_ctr128_encrypt'
collect2: error: ld returned 1 exit status

原因分析

尽管OpenSSL版本一致,但Fedora与Ubuntu的OpenSSL打包策略存在差异:

  • Fedora的libcrypto库默认保留了OpenSSL 3.x中标记为弃用的传统AES、EVP函数符号
  • Ubuntu在OpenSSL 3.x的打包中,将弃用函数符号默认隐藏,需通过显式编译宏或链接选项才能启用
  • 链接器参数顺序也可能引发问题:若-lcrypto放在目标文件之前,链接器无法正确解析符号

解决方法

  • 调整链接库顺序:确保-lcrypto放在所有目标文件之后,示例编译命令:

    gcc -g -O2 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -o nwipe nwipe.o ... -lparted -lpthread -lpanel -lncurses -ltinfo -lconfig -lcrypto
    
  • 添加兼容宏定义:编译时加入-DOPENSSL_API_COMPAT=0x10100000L(对应OpenSSL 1.1.0 API兼容级别),强制暴露弃用函数:

    • 直接修改Makefile,在CFLAGS中追加该参数
    • 或重新运行configure时指定:
      ./configure CFLAGS="-DOPENSSL_API_COMPAT=0x10100000L"
      
  • 安装兼容库:若Ubuntu提供单独的OpenSSL兼容包(如libssl3-compat),先安装该包再重新编译

  • 源码适配修改:若上述方法无效,可修改aes_ctr_prng.c,将弃用的AES函数替换为OpenSSL 3.x推荐的EVP接口

内容的提问来源于stack exchange,提问作者FBDIMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:40:55