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

OpenSSL开发报错:'BIO_ADDR'未定义等问题求助

解决OpenSSL中BIO_ADDR、BIO_set_init等未定义的编译错误

以下是针对你遇到的编译错误的几种排查和解决方法:

  • 给OpenSSL头文件加上extern "C"包裹
    OpenSSL是纯C实现的库,C++编译时会对函数名进行名字修饰,导致无法匹配到OpenSSL的C符号。把头文件放在extern "C"块里:

    extern "C" {
    #include <openssl/bio.h>
    }
    
  • 检查OpenSSL版本及API兼容宏
    BIO_ADDR、BIO_set_init这类接口是OpenSSL 1.1.0及以后版本才引入的:

    • 先执行openssl version确认当前系统的OpenSSL版本,若低于1.1.0,直接升级到新版本。
    • 如果版本符合要求,编译时要确保启用对应版本的API兼容宏,比如在编译命令或Makefile里添加-DOPENSSL_API_COMPAT=0x10100000L,这个宏会解锁1.1.0及以后的新API。
  • 修正Makefile的编译链接参数
    编译时不仅要包含头文件,链接阶段必须正确关联OpenSSL库:

    • 编译命令里加上头文件路径(默认路径可省略,添加更稳妥):-I/usr/include/openssl
    • 链接时添加库参数:-lssl -lcrypto,确保链接到SSL和Crypto库。完整编译命令示例:
      g++ your_code.cpp -o your_program -lssl -lcrypto -DOPENSSL_API_COMPAT=0x10100000L
      
  • 排查头文件的宏屏蔽问题
    打开/usr/include/openssl/bio.h,查看BIO_ADDR和BIO_set_init的声明是否被条件宏(比如#ifdef OPENSSL_NO_DEPRECATED)包裹。如果是,编译时取消这类宏的定义,比如添加-UOPENSSL_NO_DEPRECATED参数,让这些声明可见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:23