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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:16