openssl libcrypto.a和libmysqlclient.a关于ERR_remove_thread_state的多个定义

时间:2018-08-02 03:50:52

标签: c++ linux

当我编译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

2 个答案:

答案 0 :(得分:1)

不清楚您要问什么,所以我将解释错误的含义。

这是链接程序,告诉您名称ERR_remove_thread_state是在两个不同的位置定义的:err.ossl.cpp.o

这还告诉您err.olibcrypto.o中,而ssl.cpp.olibmysqlclient.a中。

因此,从本质上讲,它告诉您,通过静态链接到libcrypto和MySQL客户端库,您在使其应该调用哪个函数方面感到困惑。

编辑:您可能可以通过以下两种方法解决此问题:

  1. 将libcrypto升级到1.1.1(在撰写本文时仍为beta),因为看起来ERR_remove_thread_state在1.1.0中已弃用,并在此之后删除。

  2. 在没有SSL的情况下构建自己的MySQL版本,以避免在libmysqlclient.a中没有该代码,从而避免链接错误。

答案 1 :(得分:1)

我有同样的问题。
就我而言,最新的libmysqlclient和较早的libcrpyto是冲突的。
因此,将libmysqlclient从5.7.23降级到5.7.21。
之后,就没有问题了。

希望对您有帮助。