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客户机库,您会使它混淆应该调用哪个函数

编辑:您可以通过以下几种方式解决此问题:

  • 将libcrypto升级到1.1.1(在撰写本文时仍处于beta版),因为它的
    ERR\u remove\u thread\u state
    在1.1.0中被弃用,并在之后被删除

  • 在不使用SSL的情况下构建自己的MySQL版本,通过在
    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,它被解决了!