【问题标题】:How to force -lssl to link with libssl.so.1.1 not libssl.so?如何强制 -lssl 与 libssl.so.1.1 而不是 libssl.so 链接?
【发布时间】:2020-07-25 23:34:05
【问题描述】:
root@760501de936d:/home/project/build# ldconfig -p | grep ssl
        libssl.so.1.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.1
        libssl.so.1.0.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
        libssl.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so

我的项目正在尝试与 OpenSSL 链接。如何强制它使用libssl.so.1.1

我正在使用 cmake

find_library(LIB_SSL ssl)

然后

target_link_libraries(h264_decoder_cli PRIVATE 
${LIB_SSL} ${LIB_CRYPTO} ...)

但是我得到了类似的东西

tls_openssl.c:(.text+0x3a8): undefined reference to `OPENSSL_init_ssl'

不知道为什么,只有1.1版有这个符号

root@760501de936d:/home/project/build# nm -D /usr/lib/x86_64-linux-gnu/libssl.so | grep OPENSSL_init_ssl
root@760501de936d:/home/project/build# nm -D /usr/lib/x86_64-linux-gnu/libssl.so.1.1 | grep OPENSSL_init_ssl
0000000000033ff0 T OPENSSL_init_ssl

我检查了 cmake 是如何编译的,它只是把-lssl -lcrypto

【问题讨论】:

  • @xhienne libssl.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so 这是什么意思?如果是,那么他们的nm 输出将是相同的
  • @PakUula 我尝试使用find_library(LIB_SSL ssl NAMES libssl.so.1.1 PATHS /usr/lib/x86_64-linux-gnu/) 强制执行此行为,但我在输出中看到它只执行-lssl

标签: ssl cmake openssl linker shared-libraries


【解决方案1】:

要查找 OpenSSL CMake 有一个查找器模块,因此您不需要使用其他任何东西(即find_library)。使用find_package(OpenSSL 1.1 ...) 要求特定版本。

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 2017-10-14
    • 2017-08-07
    • 2017-08-05
    • 1970-01-01
    • 2019-04-29
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多