【发布时间】:2017-05-04 22:33:27
【问题描述】:
我想使用Poco libraries 将电子邮件通知从在各种远程站点上运行的 Windows 应用程序发送回我们的总部。 Poco 似乎使用Open SSL 进行 TLS。这两个项目的文档都不是最人性化的:-(
我无法获取与要构建的 Poco NetSSL_OpenSSL 源相关的任何内容 - 我需要 PocoNetSSL .lib 和 DLL 文件,但无法生成它们;我已经尝试构建示例,但由于路径问题,它们也无法编译。
示例的 Visual Studio 项目文件表明它需要外部的东西来提供 INCLUDE 路径,这些路径将指定 OpenSSL 的安装位置。那个外在的东西是什么? Poco documentation 建议它应该是 INCLUDE 环境变量。对我来说,它不起作用。我可能会错过什么? (我在 Win7 64 位机器上使用 VS 2015 Community 构建)。
我使用buildwin 140 rebuild 命令构建。 components 文件中的所有子项目都正确构建,直到 Crypto 项目。构建过程如下:
1>Project "S:\3rdparty\Poco\Crypto\Crypto_vs140.vcxproj" on node 1 (rebuild target(s)).
1>_PrepareForClean:
Deleting file "obj\Crypto\debug_shared\Crypto.tlog\Crypto.lastbuildstate".
InitializeBuildStatus:
Touching "obj\Crypto\debug_shared\Crypto.tlog\unsuccessfulbuild".
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\CL.exe /c /I.\include /I..\Foundation\include /I"C:\Program Files (x86)\Visual Leak Detector\include" /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _WINDOWS /D _USRDLL /D Crypto_EXPORTS /D _WINDLL /D _MBCS /GF /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /Fo"obj\Crypto\debug_shared\\" /Fd"obj\Crypto\debug_shared\vc140.pdb" /Gd /TP /analyze- /errorReport:queue src\Cipher.cpp src\CipherFactory.cpp src\CipherImpl.cpp src\CipherKey.cpp src\CipherKeyImpl.cpp src\CryptoStream.cpp src\CryptoTransform.cpp src\DigestEngine.cpp src\OpenSSLInitializer.cpp src\RSACipherImpl.cpp src\RSADigestEngine.cpp src\RSAKey.cpp src\RSAKeyImpl.cpp src\X509Certificate.cpp
X509Certificate.cpp
1>src\X509Certificate.cpp(62): error C2027: use of undefined type 'x509_st' [S:\3rdparty\Poco\Crypto\Crypto_vs140.vcxproj]
S:\3rdparty\OpenSSL\OpenSSL-Win32\include\openssl/ossl_typ.h(119): note: see declaration of 'x509_st'
对我来说很清楚,不包括来自OpenSSL 的任何内容。我不清楚应该包括什么。 OpenSSL 源代码分发确实包含一个名为 internal 的文件夹,这将有所帮助……但 Poco 推荐的 Windows 二进制分发(即提到的 WinOpenSSL 产品 here)编译掉了那个“内部”文件夹。这似乎是正确的......但如果是这样,那将意味着 Poco 源在使用OpenSSL 的方式上可能是“错误的”。是吗?很可能不会。无论哪种方式,这里都存在冲突,其解决方案对我来说并不明显。
【问题讨论】:
-
请发布您正在尝试构建的具体方式以及遇到的错误,因此也许有人可以提供帮助。 Windows 构建文档很清楚:“启动 buildwin.cmd 脚本并作为参数传递 Visual Studio 的版本(71、80、90、100 或 110)。您可以通过传递适当的命令来自定义 buildwin.cmd 正在构建的内容行参数。不带参数调用 buildwin.cmd 以查看可用的内容。"
-
看起来您正在尝试使用 OpenSSL 1.1.0,它将 API 更改为“隐藏”多个结构,包括
x509_st于 2016 年 8 月生效,但 Poco(或您拥有的版本)没有为此进行了更新。如果您无法更新或修复 Poco,请使用 OpenSSL 1.0.2,它仍然是最新的,可从 ShininglLight 获得,但不是“最新最好的”