使用网站编译命令时遇ld.exe无法找到-lssl -lcrypto错误求助
解决编译OpenSSL代码时的链接错误问题
问题原因
你遇到的cannot find -lssl -lcrypto错误,是因为pkg-config工具在当前环境下没有找到OpenSSL的配置文件(.pc文件),导致它生成的链接参数不正确;而直接手动添加-lssl -lcrypto时,编译器能直接找到Strawberry MinGW自带的OpenSSL库,所以编译成功。
解决方案
方案1:修复pkg-config的配置
- 首先检查pkg-config是否能识别OpenSSL:
如果没有输出任何和openssl相关的条目,说明需要指定pkg-config --list-all | grep ssl.pc文件的路径。 - 找到Strawberry环境中OpenSSL的
.pc文件位置,通常在C:\Strawberry\c\lib\pkgconfig目录下。设置环境变量让pkg-config能找到它:- Windows命令提示符(cmd):
set PKG_CONFIG_PATH=C:\Strawberry\c\lib\pkgconfig - PowerShell:
$env:PKG_CONFIG_PATH="C:\Strawberry\c\lib\pkgconfig"
- Windows命令提示符(cmd):
- 之后重新运行原编译命令即可:
g++ -std=c++14 clientserv.cpp $(pkg-config --cflags --libs openssl) -o https-server
方案2:直接替换pkg-config为手动链接参数
如果不想折腾pkg-config,直接用你已经验证有效的链接参数,修改编译命令为:
g++ -std=c++14 clientserv.cpp -lssl -lcrypto -o https-server
这个命令和你之前用gcc成功编译的逻辑一致,只是换成了支持C++14的g++。
内容的提问来源于stack exchange,提问作者oneandonlyk
相关产品推荐
相关产品推荐

