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
相关产品推荐
相关产品推荐

