尝试了好几个版本的包都有问题,obproxy 是4.2.1 版本的 obproxy/iocore/net/ob_ssl_processor.cpp: In member function ‘int oceanbase::obproxy::net::ObSSLProcessor::init()’:
obproxy/iocore/net/ob_ssl_processor.cpp:42:44: error: invalid conversion from ‘void ()(size_t)’ {aka ‘void ()(long unsigned int)’} to ‘void ()(size_t, const char, int)’ {aka ‘void ()(long unsigned int, const char, int)’} [-fpermissive]
42 | CRYPTO_set_mem_functions(ObSSLProcessor::malloc_for_ssl, ObSSLProcessor::realloc_for_ssl,
| ~~~~^~~~~~
| |
| void ()(size_t) {aka void ()(long unsigned int)}
In file included from /usr/local/oceanbase/deps/devel/include/openssl/comp.h:16,
from /usr/local/oceanbase/deps/devel/include/openssl/ssl.h:17,
from ../src/obproxy/iocore/net/ob_ssl_processor.h:16, 源码编译obproxy 目前碰到openssl 版本问题,目前已经安装了开发包中最新版本的openssl-static 包了
这个错误表明在编译ObSSLProcessor类的成员函数init时,发生了不兼容的类型转换。具体而言,Crypto_set_mem_functions函数需要传递三个参数,分别是分配内存的大小,用于标记内存分配的字符串以及内存池ID。然而,在ObSSLProcessor类中,只提供了两个参数的分配内存函数:malloc_for_ssl和realloc_for_ssl。这就导致了编译器发出警告。
要解决这个问题,您可以在ObSSLProcessor类中添加第三个参数,即内存池ID。以下是修改后的代码示例:
void* ObSSLProcessor::malloc_for_ssl(size_t size)
{
return malloc(size);
}
void* ObSSLProcessor::realloc_for_ssl(void* ptr, size_t size)
{
return realloc(ptr, size);
}
另外,您还需要确保OceanBase使用的OpenSSL版本与您系统上安装的OpenSSL版本相匹配。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。