“错误”;不完整类型MD5“U上下文”;使用MariaDB 10.2和Openssl 1.1.0e

“错误”;不完整类型MD5“U上下文”;使用MariaDB 10.2和Openssl 1.1.0e,openssl,mariadb,centos7,rocksdb,Openssl,Mariadb,Centos7,Rocksdb,我无法在CentOS 7中构建启用RocksDB的MariaDB 10.2 它有以下编译错误: /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void md5_result(MD5_CONTEXT*, uchar*)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:86:29: error: ‘EVP_MD_CTX_cleanup’ was not declared in this scope E

我无法在CentOS 7中构建启用RocksDB的MariaDB 10.2

它有以下编译错误:

/root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void md5_result(MD5_CONTEXT*, uchar*)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:86:29: error: ‘EVP_MD_CTX_cleanup’ was not declared in this scope    EVP_MD_CTX_cleanup(context);
                             ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:102:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined    MD5_CONTEXT md5_context;
               ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:127:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined    MD5_CONTEXT md5_context;
               ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:140:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’    return sizeof(MD5_CONTEXT);
                            ^ make[2]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o] Error 1 make[1]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/all] Error 2
以下是我用来构建它的命令:

yum安装g++cmake libbz2 dev libaio dev bison zlib1g dev libsnapy dev libgflags dev libreadline6 dev libncurse5 dev libssl dev liblz4 dev gdb git

我想这是OpenSSL版本的问题,也许MariaDB只支持较旧的OpenSSL版本

那么,有人知道如何修复它吗

我的版本:

  • OpenSSL 1.1.0e 2017年2月16日
  • g++(GCC)4.8.5 20150623
谢谢,

对MariaDB 10.2.6中OpenSSL 1.1的支持,截至今天(2017年5月17日)尚未发布,但预计很快就会发布


既然您是从github获取源代码,现在就可以尝试了,但是您不应该使用
bb-10.2-mariarocks
tree——尽管它可能在RocksDB中有一些最新的实验性更改(或者没有),但它可能在其他方面已经过时了。请改用
10.2
分支,它也有RocksDB。

与“…将'sizeof'无效应用于不完整类型…”相关的错误通常表示其中一个程序或库不支持OpenSSL 1.1.0。改用OpenSSL 1.0.2。您可能需要启用弱密码才能获得MD5。也可以在OpenSSL wiki上看到。但是我必须使用最新/更新的OpenSSL版本。如果项目不支持OpenSSL 1.1.0,那么你就很糟糕了。因为我需要ChaCha/Poly1305(将来还需要TLS1.3),但OpenSSH只支持OpenSSL 1.0.2及以下版本。OpenSSL的并行安装大多在Unix和Linux上被破坏,因此我无法解决它。我现在改为使用10.2,但是它有不同的编译错误:CMakeFiles/mariadb_obj.dir/secure/openssl.c.o:In function
ma_tls_start':/root/mariadb-10.2/libmariadb/libmariadb/secure/openssl.c:299:openssl_init ssl'CMakeFiles/mariadb_obj.dir/secure/openssl.c.o:In function
ma_tls_init':/root/mariadb-10.2/libmariadb/libmariadb/secure/openssl.c:488:对
TLS\u client\u方法的未定义引用'我会做一些猜测。如果您已将OpenSSL 1.1.0安装到
/usr/local/lib64
中,而
/usr/lib64
中仍有1.0.1,则您的构建会变得混乱。尝试使用指向
SSL
CRYPTO
的显式路径重新运行
cmake
,如
cmake-DOPENSSL_SSL_LIBRARY=/usr/local/lib64/libssl.so-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib64/libcrypto.so
,然后再次执行
make
。我试过了。更好!但还有一些其他错误:make[2]:***没有规则使目标
/usr/lib64/libncurses'成为
client/mysql'所需要的。停止make[2]:***正在等待未完成的作业……关于ncurses的最后一个问题看起来很奇怪,也不相关,更像是一个配置错误(它出现了
make/usr/local/lib64
?!)。我建议删除
CMakeCache.txt
,甚至可能
makeclean
以确保安全(或者
git clean-dfx
),然后重新运行整个
cmake
命令,然后执行make。如果再次出现问题,请粘贴您运行的
cmake
命令。RocksDB在10.2.5中,它作为一个单独的包提供,例如
MariaDB-10.2.5-centos7-x86_64-RocksDB-engine.rpm
。对于构建问题——您正在使用定制的CentOS安装,这可能就是为什么它如此困难的原因。您可以从构建系统中看到CentOS 7的构建日志,例如,在,它相当平滑:
git clone https://github.com/MariaDB/server.git mariadb-10.2
git checkout bb-10.2-mariarocks
git submodule init  git submodule update

cmake -DCURSES_LIBRARY=/usr/lib64/libncurses -DCURSES_INCLUDE_PATH=/usr/include . 
make -j10