尝试在 Visual Studio 2012 中包含 OpenSSL 标头:错误 LNK2019:未解析的外部符号

Posted

技术标签:

【中文标题】尝试在 Visual Studio 2012 中包含 OpenSSL 标头:错误 LNK2019:未解析的外部符号【英文标题】:Trying to include OpenSSL headers in Visual Studio 2012: error LNK2019: unresolved external symbol 【发布时间】:2013-11-14 22:19:22 【问题描述】:

我知道这个问题很常见。事实上,我对这个问题进行了很多搜索,但找不到任何适合我情况的解决方案。 我在使用 openssl 库的 C++ Visual Studio 2012 项目中工作。 这是最低限度的示例代码。

#include <iostream>
#include <stdio.h>
//OpenSSL
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/x509.h>

using namespace std;

int main()
    SSL_library_init ();

    return 0;

我在 Windows7-64b 机器上运行 Visual Studio 2012 Proffesional。 我从here 下载了 Win64 OpenSSL v1.0.1e Light 安装程序 并安装它。然后我添加到项目属性-> 配置属性-> C/C++-> 常规-> 附加包含目录 路径“C:\OpenSSL-Win64\include”。 因此,此时,示例代码并未在 Visual Studio 中显示编译错误。 然后,我还添加到Linker-> Additional library directory,路径“C:\OpenSSL-Win64\lib”,然后在Linker-> Additional Dependencies,我添加了“libeay32.lib;”和“ssleay32.lib”。 但是,当我尝试编译时,我得到了这个错误:

1>------ Build started: Project: Client, Configuration: Debug Win32 ------
1>  Client.cpp
1>Client.obj : error LNK2019: unresolved external symbol _SSL_library_init referenced in function _main
1>c:\users\gabi\documents\visual studio 2012\Projects\Project1\Debug\Client.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我还尝试了其余的 OpenSSL 库,因为 SSL_init_function() 可能不属于“libeay32.lib”或“ssleay32.lib”。所以我在源代码中添加了:

#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "VC\\libeay32MD.lib")
#pragma comment(lib, "VC\\libeay32MDd.lib")
#pragma comment(lib, "VC\\libeay32MT.lib")
#pragma comment(lib, "VC\\libeay32MTd.lib")
#pragma comment(lib, "VC\\ssleay32MD.lib")
#pragma comment(lib, "VC\\ssleay32MDd.lib")
#pragma comment(lib, "VC\\ssleay32MT.lib")
#pragma comment(lib, "VC\\ssleay32MTd.lib")

这些都是库,除了子文件夹“VC\static”中的那些,因为静态文件夹中的文件与其中一些文件同名,这可能是冲突。 无论如何,错误是一样的。 哦,我还在 PATH 环境变量中添加了字符串“C:\OpenSSL-Win64\bin”。 而且...我还尝试链接到我也安装的 Win32 OpenSSL,并在this tutorial 之后编译我自己的“libeay32.lib”和“ssleay32.lib”。 32b 或 64b 都不起作用。 我对此非常绝望,有人可以帮助我吗? 谢谢!

【问题讨论】:

【参考方案1】:

我遇到了和你一样的问题。 问题是我的项目平台是WIN32的,但是我下载的是OpenSSL x64,所以无法调用SSL_library_init ();

OpenSSL for Windows (code.google.com)

希望我的回答对你有所帮助,即使我迟到了 2 年 :3

【讨论】:

是的,太晚了。甚至不记得我是否最终设法解决了它。无论如何,我想你的解决方案会很好用。谢谢! 链接失效

以上是关于尝试在 Visual Studio 2012 中包含 OpenSSL 标头:错误 LNK2019:未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Visual Studio 2013 中包含文件

不能在 Visual Studio 中包含 Python.h

使用visual studio pack在nuget包中包含构建目录

OpenNN 在 Visual Studio 2017 中包含未解析的外部符号

在 Microsoft Visual Studio 2015 的 C++ 项目中包含 Armadillo C++ 库

Visual Studio 2012 错误:无法打开源文件