"找不到-lcrypto -lssl"使用MinGW在Windows上使用OpenSSL

时间:2016-01-12 19:27:06

标签: c windows gcc openssl mingw

尝试使用openssl的c代码,并在命令提示符下编译时出现此错误。

c:\openssl>gcc -lssl -lcrypto -o test test.c -IC:\openssl\include\
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lssl
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lcrypto
collect2.exe: error: ld returned 1 exit status

现在该怎么办,请帮忙。

编辑: 即使这些也没有帮助:

c:\openssl>gcc -o test test.c  -lssl -lcrypto -Ic:\openssl\include\
c:\openssl>gcc -o test test.c -I c:\openssl\include\ -L c:\openssl\lib -lssl -lcrypto
c:\openssl>gcc -o test test.c -Lc:\openssl\lib -lssl -lcrypto -Ic:\openssl\include\

2 个答案:

答案 0 :(得分:1)

首先,您需要使用mingw编译openssl,您链接到的二进制文件是使用Visual Studio编译的,并且已过期并包含安全漏洞。

0.9.8支持已经停止,所以我建议使用1.0.1 +。

安装ActivePerl并删除Stawberry Perl,因为它与openssl不兼容。

https://openssl.org/source/下载最新的1.0.1源代码(openssl-1.0.1q.tar.gz)

在msys控制台中,在将openssl源解压缩到的目录中运行以下命令:

 $ perl Configure mingw --prefix=/c/openssl
 $ make depend
 $ make
 $ make install

然后运行编译命令:

gcc -o test test.c -Lc:\openssl\lib -lssl -lcrypto -Ic:\openssl\include\

编辑: 使用mingw在0.9.8上存在构建问题,因此使用1.0.1或更高版本并使用ActivePerl而不是Strawberry Perl。

答案 1 :(得分:0)

例如我做的不一样。
我从https://www.openssl.org/community/binaries.html下载了编译的二进制文件。
然后,只针对他们。使用-L将搜索目录添加到链接器(解释为here)。

最后我还是

g++ my_program.cpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" -L"C:\Program Files (x86)\OpenSSL-Win32\lib\MinGW" -lssl -lcrypto

您似乎在C:/openssl/中拥有它,因此(并有可能表述明显)对您的环境进行了必要的更改。