You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下用g++编译含OpenSSL的C++程序:找不到-lssl与-lcrypto

问题描述
  • 系统:Windows 11
  • 编译工具:MinGW g++ 6.3.0
  • 代码依赖的OpenSSL头文件:
    #include <openssl/aes.h>
    #include <openssl/hmac.h>
    #include <openssl/evp.h>
    #include <openssl/sha.h>
    
  • OpenSSL安装情况:安装了Win32OpenSSL的64位版本,路径为C:\Program Files\OpenSSL-Win64\
  • 执行的编译命令:
    g++ -o wifi wifi.cpp -I"C:\Program Files\OpenSSL-Win64\include" -L"C:\Program Files\OpenSSL-Win64\lib" -lssl -lcrypto
    
  • 报错信息:
    c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lssl
    c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lcrypto
    
  • 已确认:OpenSSL目录下存在libssl.dll和libcrypto.dll,但MinGW链接器仍无法识别。
解决方案

1. 修复架构不兼容问题

你的MinGW是32位(路径中mingw32标识),但安装的是64位OpenSSL,两者架构不匹配导致链接器无法识别库文件。

  • 两种解决方向:
    • 卸载当前64位OpenSSL,安装对应32位版本;
    • 替换为64位MinGW编译工具链。

2. 确认链接器所需的库文件类型

MinGW链接器查找的是静态库(.a后缀)或动态导入库(.dll.a后缀),而非直接查找.dll文件。你需要检查OpenSSL的lib目录下是否存在libssl.a/libssl.dll.a、libcrypto.a/libcrypto.dll.a:

  • 若缺失这些文件,重新安装OpenSSL时选择"Copy OpenSSL DLLs to the application directory"选项,确保导入库被正确放置到lib目录;
  • 若仍无法找到,可下载针对MinGW编译的OpenSSL版本。

3. 调整编译命令参数

  • 确认-L指定的路径是否正确:部分Win32OpenSSL版本的lib目录下会细分VC、MinGW子目录,需指定到对应MinGW的库路径,比如-L"C:\Program Files\OpenSSL-Win64\lib\MinGW";
  • 尝试直接指定库文件的完整路径跳过路径搜索,命令示例:
    g++ -o wifi wifi.cpp -I"C:\Program Files\OpenSSL-Win64\include" "C:\Program Files\OpenSSL-Win64\lib\libssl.dll.a" "C:\Program Files\OpenSSL-Win64\lib\libcrypto.dll.a"
    

4. 环境变量补充(可选)

将OpenSSL的lib目录添加到系统PATH环境变量,或临时通过set PATH=%PATH%;C:\Program Files\OpenSSL-Win64\lib命令添加到当前终端的环境变量,辅助链接器查找库文件。


内容的提问来源于stack exchange,提问作者overplex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:42:29