当我编译c ++服务器并链接openssl-1.0.2 libcrypto.a和libmysqlclient.a时,`ERR_remove_thread_state'的多个定义有问题。这里是错误:
/usr/local/openssl-1.0.2/lib/libcrypto.a(err.o): In function `ERR_remove_thread_state':
err.c:(.text+0x1ac0): multiple definition of `ERR_remove_thread_state'
/usr/lib/x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o):(.text+0x1df0): first defined here
答案 0 :(得分:1)
不清楚您要问什么,所以我将解释错误的含义。
这是链接程序,告诉您名称ERR_remove_thread_state
是在两个不同的位置定义的:err.o
和ssl.cpp.o
。
这还告诉您err.o
在libcrypto.o
中,而ssl.cpp.o
在libmysqlclient.a
中。
因此,从本质上讲,它告诉您,通过静态链接到libcrypto和MySQL客户端库,您在使其应该调用哪个函数方面感到困惑。
编辑:您可能可以通过以下两种方法解决此问题:
将libcrypto升级到1.1.1(在撰写本文时仍为beta),因为看起来ERR_remove_thread_state
在1.1.0中已弃用,并在此之后删除。
在没有SSL的情况下构建自己的MySQL版本,以避免在libmysqlclient.a
中没有该代码,从而避免链接错误。
答案 1 :(得分:1)
我有同样的问题。
就我而言,最新的libmysqlclient和较早的libcrpyto是冲突的。
因此,将libmysqlclient从5.7.23降级到5.7.21。
之后,就没有问题了。
希望对您有帮助。