【问题标题】:Unable to link openssl libraries to CLion C program on windows with cygwin无法使用 cygwin 将 openssl 库链接到 Windows 上的 CLion C 程序
【发布时间】:2022-01-28 13:15:27
【问题描述】:

我是 C 编程新手,我想开始一个项目以用于学习目的。 我正在尝试使用 cygwin 在 Windows 上使用 clion 在 C 中打开一个 ssl 套接字。 对于我一直在使用本教程的代码: https://aticleworld.com/ssl-server-client-using-openssl-in-c/

我已经用这些库安装了 cygwin:make、gdb、gcc-g++、libssl-dev

我在编辑器中没有看到任何编译错误,但我无法运行项目。 当我尝试运行它时,我在链接阶段收到很多 undefined 错误:

undefined reference to `OPENSSL_init_crypto'
undefined reference to `OPENSSL_init_ssl'
undefined reference to `SSL_CTX_new'

还有更多类似的。

所以我将 m cmake 文件更新为如下所示:

cmake_minimum_required(VERSION 3.21)
project(ssl_example C)

set(CMAKE_C_STANDARD 99)
include_directories(/usr/include/openssl/)
link_libraries(openssl)
add_executable(ssl_example main.c)

现在我得到了这个错误-

FAILED: ssl_example.exe 
: && /usr/bin/gcc.exe -g -Wl,--enable-auto-import CMakeFiles/ssl_example.dir/main.c.o -o ssl_example.exe -Wl,--out-implib,libssl_example.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -lopenssl  -lcrypto && :
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lopenssl
collect2: error: ld returned 1 exit status

编辑:

this is how my cmake file looks like:
cmake_minimum_required(VERSION 3.21)
project(ssl_example C)

set(CMAKE_C_STANDARD 99)
include_directories(/usr/include/openssl/)
link_libraries(ssl)
link_libraries(crypto)
link_libraries(openssl)
add_executable(ssl_example main.c)

我仍然遇到同样的错误cannot find -lopenssl

【问题讨论】:

    标签: c openssl cygwin clion


    【解决方案1】:

    OPENSSL_init_crypto 属于libcrypto

    $ cd /usr/lib
    
    $ grep OPENSSL_init_crypto  *.dll.a
    grep: libcrypto.dll.a: binary file matches
    
    $ nm libcrypto.dll.a |grep " T " |grep OPENSSL_init
    0000000000000000 T OPENSSL_init_crypto
    0000000000000000 T OPENSSL_init
    

    而另外两个给libssl

    $ grep OPENSSL_init_ssl  *.dll.a
    grep: libssl.dll.a: binary file matches
    
    $ nm libssl.dll.a |grep " T " |grep OPENSSL_init_ssl
    0000000000000000 T OPENSSL_init_ssl
    
    $ grep SSL_CTX_new *.dll.a
    grep: libQtNetwork.dll.a: binary file matches
    grep: libssl.dll.a: binary file matches
    
    nm libssl.dll.a |grep " T " |grep SSL_CTX_new
    0000000000000000 T SSL_CTX_new
    

    所以你需要链接 libssllibcrypto

    【讨论】:

    • 我用我当前的 cmake 文件编辑了我的问题。我仍然得到同样的错误
    • 删除link_libraries(openssl)。 Pedro Perez 已经告诉过你了
    【解决方案2】:

    您必须链接到的库称为“libssl”而不是“openssl”。在链接中必须显示为'-lssl',而不是'-lopenssl'

    【讨论】:

    • 我尝试将link_libraries(openssl) 替换为link_libraries(ssl) 并得到同样的错误,当我尝试link_libraries(libssl) 时仍然遇到同样的错误
    • 错误不能完全相同。你重新运行 cmake 了吗?
    • @matzeri 当我只使用link_libraries(ssl) 时,我得到undefined reference to OPENSSL_init_crypto'` 错误。当我同时使用link_libraries(openssl)link_libraries(ssl) 时,我得到相同的cannot find -lopenssl 错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多