在RHEL 8.5编译Syslog-ng 3.8.1执行make时遇编译错误求助
Syslog-ng源码编译Make阶段报错解决
问题现象
从源码构建Syslog-ng时,已安装依赖,但执行make命令出现以下编译错误:
make --no-print-directory all-recursive CC lib/lib_libsyslog_ng_la-tlscontext.lo lib/tlscontext.c: In function 'tls_session_verify': lib/tlscontext.c:140:16: error: dereferencing pointer to incomplete type 'X509_STORE_CTX' {aka 'struct x509_store_ctx_st'} if (ok && ctx->error_depth == 0 && !tls_session_verify_fingerprint(ctx)) ^~ lib/tlscontext.c: In function 'tls_context_setup_session': lib/tlscontext.c:313:48: error: dereferencing pointer to incomplete type 'SSL_CTX' {aka 'struct ssl_ctx_st'} X509_VERIFY_PARAM_set_flags(self->ssl_ctx->param, verify_flags); ^~ lib/tlscontext.c: In function 'tls_verify_certificate_name': lib/tlscontext.c:554:19: warning: 'ASN1_STRING_data' is deprecated [-Wdeprecated-declarations] guchar *dnsname = ASN1_STRING_data(gen_name->d.dNSName); ^~~~~~ In file included from /usr/include/openssl/opensslconf.h:42, from /usr/include/openssl/e_os2.h:13, from /usr/include/openssl/ssl.h:15, from lib/tlscontext.h:29, from lib/tlscontext.c:24: /usr/include/openssl/asn1.h:554:1: note: declared here DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) ^~~~~~~~~~~~~~~~~~ make[2]: *** [Makefile:9325: lib/lib_libsyslog_ng_la-tlscontext.lo] Error 1 make[1]: *** [Makefile:13207: all-recursive] Error 1 make: *** [Makefile:5434: all] Error 2
问题原因
当前使用的OpenSSL版本(1.1.0及以上)对部分结构体做了封装,禁止直接访问内部成员;同时ASN1_STRING_data函数被标记为废弃,而你使用的Syslog-ng源码版本未适配这些API变化。
解决办法
1. 修改源码适配高版本OpenSSL
直接修改lib/tlscontext.c中的对应代码行,替换为OpenSSL 1.1.0+兼容的API:
- 第140行替换为:
if (ok && X509_STORE_CTX_get_error_depth(ctx) == 0 && !tls_session_verify_fingerprint(ctx))
- 第313行替换为:
X509_VERIFY_PARAM_set_flags(SSL_CTX_get0_param(self->ssl_ctx), verify_flags);
- 第554行替换为:
guchar *dnsname = (guchar *)ASN1_STRING_get0_data(gen_name->d.dNSName);
修改完成后重新执行make即可。
2. 降级OpenSSL版本
如果不想修改源码,可安装OpenSSL 1.0.x版本,编译时指定该版本路径:
./configure --with-openssl=/path/to/openssl-1.0.x make
3. 升级Syslog-ng版本
下载并使用官方已经适配OpenSSL 1.1.0+的Syslog-ng新版本源码,重新执行编译流程。
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

