Openssl 如何在Windows上构建Poco NET_SSL
我想用它将运行在各种远程站点上的Windows应用程序的电子邮件通知发送回我们的总部。Poco似乎使用TLS。这两个项目的文档不是最方便用户的:-( 我在获取与PocoOpenssl 如何在Windows上构建Poco NET_SSL,openssl,poco-libraries,Openssl,Poco Libraries,我想用它将运行在各种远程站点上的Windows应用程序的电子邮件通知发送回我们的总部。Poco似乎使用TLS。这两个项目的文档不是最方便用户的:-( 我在获取与PocoNetSSL\u OpenSSL源代码相关的任何内容时遇到问题-我需要PocoNetSSL.lib和DLL文件,但无法生成它们;我尝试过构建示例,但由于路径问题,它们也无法编译 示例的Visual Studio项目文件表明,它希望外部提供INCLUDE路径,该路径将指定安装OpenSSL的位置。这是什么外部内容?建议它应该是INC
NetSSL\u OpenSSL
源代码相关的任何内容时遇到问题-我需要PocoNetSSL
.lib和DLL文件,但无法生成它们;我尝试过构建示例,但由于路径问题,它们也无法编译
示例的Visual Studio项目文件表明,它希望外部提供INCLUDE
路径,该路径将指定安装OpenSSL
的位置。这是什么外部内容?建议它应该是INCLUDE
环境变量。对我来说,它不起作用。我可能是什么sing?(我正在Win7 64位机器上使用VS 2015社区构建)
我使用buildwin 140 rebuild
命令进行构建。组件
文件中的所有子项目都正确构建,直到加密
项目。该项目的构建过程如下:
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
产品)编译掉了“内部”文件夹。这似乎是对的……但如果是这样,那就意味着Poco源代码可能是“错误的”在它使用OpenSSL的方式上,是吗?很可能不是。无论哪种方式,这里都存在冲突,其解决方案对我来说并不明显。一年前,我放弃了这一点,使用了另一种产品,这就是文档的状态
我最近有理由再试一次,在经历了很多痛苦之后,我发现我可以按如下方式编译它:
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'
- 下载最新的Poco发行版(1.9.0)
- 直接从
文件夹中安装OpenSSL 1.10,这样Poco
就位于..\Poco\OpenSSL
旁边..\Poco\Crypto
- 从中获取
文件夹的内容,并将其复制到build
..\Poco\OpenSSL\build
- 由于电脑上的PowerShell安装错误,我无法运行
脚本,因此使用了build.ps1
文件夹中预编译的二进制文件build
- 由于电脑上的PowerShell安装错误,我无法运行
- 自定义
脚本,将buildwin.cmd
的位置指定为OpenSSL
..\Poco\OpenSSL
- 使用适当的参数运行
脚本buildwin.cmd
这为我构建了所有的项目,没有任何错误(只有一些警告)。请注意,在编译MySQL和ODBC项目时,还有类似性质的附加设置(即使用ODBC选项安装MySQL,自定义
buildwin.cmd
脚本以适应).请发布您尝试构建的确切方式以及您遇到的错误,这样也许有人可以提供帮助。windows构建文档很清楚:“启动buildwin.cmd脚本并将visual studio的版本(71、80、90、100或110)作为参数传递。”。您可以通过向buildwin.cmd传递适当的命令行参数来自定义buildwin.cmd正在生成的内容。在没有参数的情况下调用buildwin.cmd以查看可用的内容。”看起来您正在尝试使用OpenSSL 1.1.0,它将API更改为“隐藏”多个结构,包括2016-08年生效的x509\u st
,但Poco(或您拥有的版本)尚未对此进行更新。如果您无法更新或以其他方式修复Poco,请使用OpenSSL 1.0.2,它仍然是最新的,可从ShininglLight获得,但不是“最新和最好的”