如何在Windows上构建Poco NET_SSL

时间:2017-05-04 22:33:27

标签: openssl poco-libraries

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

我无法获得与构建Poco NetSSL_OpenSSL源相关的任何内容 - 我需要PocoNetSSL .lib和DLL文件,但无法生成它们;我已经尝试构建示例,但由于路径问题,它们无法编译。

示例的Visual Studio项目文件表明它期望外部提供INCLUDE路径,这些路径将指定OpenSSL的安装位置。什么是外在的东西? Poco documentation表明它应该是INCLUDE环境变量。对我来说,这不起作用。我可能会失踪什么? (我正在使用Win7 64位计算机上的VS 2015社区构建)。

我使用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的方式上可能是“错误的”。是吗?很可能不是。无论哪种方式,这里都存在冲突,其解决方案对我来说并不明显。

1 个答案:

答案 0 :(得分:0)

一年前,我放弃了这个并使用了不同的产品,这就是文档的状态。

我最近有理由再次尝试,经过多次痛苦后,发现我可以按照以下方式编译:

  • 下载最新的Poco发行版(1.9.0)
  • 直接从Poco文件夹中的ShiningLight安装OpenSSL 1.10,以便...\Poco\OpenSSL...\Poco\Crypto并列
  • Poco OpenSSL project on GitHub获取build文件夹的内容,并将其复制到...\Poco\OpenSSL\build
    • 由于我的PC上安装了错误的PowerShell,我无法运行build.ps1脚本,因此使用了build文件夹中预编译的二进制文件
  • 自定义buildwin.cmd脚本,将OpenSSL的位置指定为...\Poco\OpenSSL
  • 使用适当的参数运行buildwin.cmd脚本

这为我构建了所有项目而没有任何错误(仅此处有一些警告)。请注意,还有其他类似的设置可以编译MySQL& ODBC项目(即使用ODBC选项安装MySQL,自定义buildwin.cmd脚本以适应)。