在Visual Studio 2012中使用OpenSSL

6
我已经从http://www.openssl.org/source/下载了最新版本的Openssl。
我希望在Visual Studio 2012中使用它,特别是获取文件的md5 / sha-1哈希值,但我无法包含/设置openssl库的环境。老实说,我对应该包含什么和在哪里包含感到困惑,但我已经阅读了README-s。
我遇到了这个错误。
Error   1   error LNK2019: unresolved external symbol _MD5_Init referenced in function _main

所以我的问题是,我已经下载了最新版本(openssl-1.0.1e.tar.gz),我应该在VS2012中配置什么才能使用这个库?谢谢!
更新
这个问题也帮助我找到了解决方案。Boost SSL with Visual Studio 2010 and OpenSSL 使用openSSL库与VS2012所需的步骤:
下载并安装一个版本(我有64位操作系统,但我安装了32位openssl)http://slproweb.com/products/Win32OpenSSL.html
在VS中创建新项目,然后选择“配置属性/C/C++/常规/附加包含目录”:openssl包含文件夹(C:\OpenSSL-Win32\include)。
链接器/常规/附加库目录:C:\OpenSSL-Win32\lib。
链接器/输入/附加依赖项:

libeay32.lib libeay32MTd.lib libeay32MT.lib libeay32MDd.lib libeay32MD.lib ssleay32.lib ssleay32MTd.lib ssleay32MT.lib ssleay32MDd.lib ssleay32MD.lib

(据说我只需要添加与C / C ++ /代码生成/运行时库匹配的文件,但是这种方式对我有效。)

  • 将这些文件复制到当前VS文件夹/VC / lib中

1
你的意思是将这些文件复制到当前的VS文件夹/VC/lib中吗? - Piero Alberto
1个回答

5
你使用哪个编译器来编译OpenSSL?你使用了MinGW吗?如果是这样,请确保不要剥离它们(或者只用--strip-unneeded命令),否则导入符号将被剥离。头文件和库版本是否匹配?
也许你想尝试从以下网站下载预编译版本:http://slproweb.com/products/Win32OpenSSL.html,这些版本一定能正常工作。

我认为预先构建的选项是一个不错的选择。现在我已经下载了(Win64 OpenSSL v1.0.1e,我有64位W7),并安装了它。在OpenSSL-Win64目录中有包含文件,在lib中有.libs文件。现在我该怎么办呢?我应该将它们复制到VS目录中吗?还是我需要在VS中进行配置? - rdanee
我将C/C++/General/Additional Include Dirs设置为OpenSSL-Win64/include、OpenSSL-Win64/lib,并将依赖项设置为libeay32.lib、ssleay32.lib。我遇到了同样的问题。 - rdanee
这是正确的做法。你确定已经包含了VC目录吗?例如C:\OpenSSL-WinXX\lib\VC或C:\OpenSSL-WinXX\lib\VC\static用于静态库。然后在发布版本中链接MT libs,在调试版本中链接MTd libs。(libeay32MT.lib,...) - Thomas
如果我只包括那些库所在的文件夹,它不起作用。:( 当我将它们复制到 Visual Studio 的 VC/lib 文件夹中时,它就可以工作了。 - rdanee
很好,你让它工作了,但这不是正确的做法,永远(!)不要将任何第三方库复制到VC目录中。从我所看到的,我认为你没有包含OpenSSL的VC库目录,而是MinGW的。你可能也在两个目录中拥有OpenSSL库,这可能意味着VC首先看到32位库,并输出“未解决的符号”错误。我正在使用相同的OpenSSL发行版,而不会污染我的VC目录,并且它可以毫无问题地工作。 - Thomas
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接