openssl libcrypto.a和libmysqlclient.a对'ERR_remove_thread_state'; p>当我编译C++服务器和链接OpenSSL -1.0.2 LIbCHIDET.A和LIBYMQLLclit.a时,错误定义为“ErrEnReleVeTHeRead状态”。这里的错误是: /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
不清楚你在问什么,所以我会解释错误的含义 这是链接器告诉您名称openssl libcrypto.a和libmysqlclient.a对'ERR_remove_thread_state'; p>当我编译C++服务器和链接OpenSSL -1.0.2 LIbCHIDET.A和LIBYMQLLclit.a时,错误定义为“ErrEnReleVeTHeRead状态”。这里的错误是: /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,c++,linux,C++,Linux,不清楚你在问什么,所以我会解释错误的含义 这是链接器告诉您名称ERR\u remove\u thread\u state定义在两个不同的位置:ERR.o和ssl.cpp.o 它还告诉您,err.o在libcrypto.o中,ssl.cpp.o在libmysqlclient.a中 因此,本质上,它告诉您,通过静态链接到libcrypto和MySQL客户机库,您会使它混淆应该调用哪个函数 编辑:您可以通过以下几种方式解决此问题: 将libcrypto升级到1.1.1(在撰写本文时仍处于beta版),
ERR\u remove\u thread\u state
定义在两个不同的位置:ERR.o
和ssl.cpp.o
它还告诉您,err.o
在libcrypto.o
中,ssl.cpp.o
在libmysqlclient.a
中
因此,本质上,它告诉您,通过静态链接到libcrypto和MySQL客户机库,您会使它混淆应该调用哪个函数
编辑:您可以通过以下几种方式解决此问题:
ERR\u remove\u thread\u state
在1.1.0中被弃用,并在之后被删除libmysqlclient.a
中没有该代码来避免链接错误在我的例子中,最新的libmysqlclient和旧的libcrpyto是冲突的。
因此,将libmysqlclient从5.7.23降级到5.7.21。
之后,就没有问题了
我希望这能有所帮助。你静态链接有什么特别的原因吗?@Someprogrammerdude-这只是
/usr/local
的猜测,但也许是为了避免过去25年左右困扰操作系统的所有愚蠢的Linux路径问题。他将在运行时从/lib{64}
中获得他构建的版本,而不是错误的版本。这里的问题类似于上面的第一种方法。但它有相同的错误,即“ERR_remove_thread_state”的多个定义。我通过apt get安装了libmysqlclient dev,通过编译源代码安装了openssl。是的,我将openssl版本降级为0.9.8,它被解决了!