开发者社区> 问答> 正文

在OceanBase数据库中,源码编译obproxy 目前碰到openssl 版本问题

尝试了好几个版本的包都有问题,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 包了

展开
收起
崔问问 2023-11-29 17:41:02 35 0
来自:OceanBase
1 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个错误表明在编译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版本相匹配。

    2023-11-29 21:13:56
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
蚂蚁OceanBase数据库团队,用于OceanBase技术原理、运维经验和案例分享、对外交流。
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载