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

Solaris 11 Sparc编译net-snmp 5.7.3时遇编译错误求助

解决Solaris 11 Sparc平台编译net-snmp 5.7.3的make错误

我之前在Solaris 11 Sparc环境下编译旧版本net-snmp时碰到过几乎一模一样的错误,给你几个经过验证的解决思路:

错误原因分析

你看到的keytools.c里的指针转换警告和void表达式错误,本质是net-snmp 5.7.3的加密逻辑代码和Solaris 11自带的加密库/编译器环境不兼容,尤其是generate_Ku函数里对加密API的调用处理不符合Solaris平台的规范。


解决方案1:强制使用OpenSSL库编译

Solaris自带的加密工具链兼容性较差,我们可以指定用OpenSSL来处理加密部分,这是最稳妥的方案:

  1. 先确认你已经安装了OpenSSL(可以通过pkg install openssl或者从OpenCSW仓库执行pkgutil -i openssl安装)
  2. 清理之前的编译缓存,重新运行configure:
    make clean && rm -rf config.log config.status
    ./configure --prefix=/opt --with-openssl=/usr/sfw  # 如果你的OpenSSL装在/opt/csw就改成对应路径
    
  3. 重新执行make && make install

解决方案2:直接修改keytools.c代码适配

如果不想折腾依赖,可以手动修复报错的代码:

  1. 打开/scratch/kkumsati/net-snmp/snmplib/keytools.c
  2. 定位到generate_Ku函数:
    • 第153行的指针赋值警告:给返回值添加强制类型转换,比如如果是调用EVP_MD_CTX_create(),改成:
      ctx = (EVP_MD_CTX *) EVP_MD_CTX_create();
      
    • 第161、166行的void表达式错误:这两行大概率是把返回void的加密函数(比如EVP_DigestUpdate)当成有返回值的函数来赋值了,直接去掉赋值操作即可,比如把ret = EVP_DigestUpdate(ctx, buf, len);改成EVP_DigestUpdate(ctx, buf, len);
  3. 保存修改后,重新执行make

解决方案3:调整编译参数修正宏定义问题

你的configure自动生成的编译参数里有-Usolaris2 -Dsolaris2=solaris2,这会导致系统宏定义混乱,尝试手动指定CFLAGS:

make clean && rm -rf config.log config.status
./configure --prefix=/opt CFLAGS="-fno-strict-aliasing -g -O2 -D__SOLARIS__"
make

额外注意事项

  • 确保你PATH里的gcc是较新版本的(比如gcc 4.8及以上),Solaris自带的gcc版本可能太低,建议使用SFW或者OpenCSW提供的gcc
  • 确认安装了所有必要的依赖包:比如libcrypto、libssl的开发包,还有automake、autoconf这些构建工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:30