Openssl 如何在Windows上构建Poco NET_SSL

Openssl 如何在Windows上构建Poco NET_SSL,openssl,poco-libraries,Openssl,Poco Libraries,我想用它将运行在各种远程站点上的Windows应用程序的电子邮件通知发送回我们的总部。Poco似乎使用TLS。这两个项目的文档不是最方便用户的:-( 我在获取与PocoNetSSL\u OpenSSL源代码相关的任何内容时遇到问题-我需要PocoNetSSL.lib和DLL文件,但无法生成它们;我尝试过构建示例,但由于路径问题,它们也无法编译 示例的Visual Studio项目文件表明,它希望外部提供INCLUDE路径,该路径将指定安装OpenSSL的位置。这是什么外部内容?建议它应该是INC

我想用它将运行在各种远程站点上的Windows应用程序的电子邮件通知发送回我们的总部。Poco似乎使用TLS。这两个项目的文档不是最方便用户的:-(

我在获取与Poco
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)
  • 直接从
    Poco
    文件夹中安装OpenSSL 1.10,这样
    ..\Poco\OpenSSL
    就位于
    ..\Poco\Crypto
    旁边
  • 从中获取
    build
    文件夹的内容,并将其复制到
    ..\Poco\OpenSSL\build
    • 由于电脑上的PowerShell安装错误,我无法运行
      build.ps1
      脚本,因此使用了
      build
      文件夹中预编译的二进制文件
  • 自定义
    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获得,但不是“最新和最好的”