“错误”;不完整类型MD5“U上下文”;使用MariaDB 10.2和Openssl 1.1.0e
我无法在CentOS 7中构建启用RocksDB的MariaDB 10.2 它有以下编译错误:“错误”;不完整类型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
/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
既然您是从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 functionma_tls_start':/root/mariadb-10.2/libmariadb/libmariadb/secure/openssl.c:299:openssl_init ssl'CMakeFiles/mariadb_obj.dir/secure/openssl.c.o:In functionma_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