为WP8平台构建本机OpenSSL库

时间:2014-06-20 07:38:16

标签: c# c++ windows-phone-8 openssl

我正在创建Windows phone 8应用程序。我需要创建使用已编译的OpenSSL库的App。我正在关注standard最新的库。

我正在执行INSTALL.W64步骤,因为我不知道要使用哪个。*因为我的机器是64位我更喜欢这个:

为Win64 / x64构建:

1 perl配置VC-WIN64A
 2 ms \ do_win64a
 3 nmake -f ms \ ntdll.mak
 4 cd out32dll
 5 .. \ ms \ test

使用Visual Studio命令Prompt.Upto第2步很好。第3步它无法构建,也没有在out32dll Folder中创建库。它给出了如下错误:

C:\Program Files (x86)\Windows Phone Kits\8.0\include\windows.h(182) : fatal err
or C1083: Cannot open include file: 'winreg.h': No such file or directory
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\WPSDK\WP80\BIN\cl.EXE"' : return code '0x2'
Stop.

我的问题是: Windows Phone平台是否真的支持OpenSSL 。我看到this这是真/假我不确定。

除了这种标准方式,我还尝试了this解决方案。能够完成在Visual Studio中编译的answer.got构建中提到的步骤。在Windows Phone 8中编译OpenSSLWP8 Project.Compiled {{1} }。

但是当我尝试创建引用libeay32时,我在该库中得到NativeCrypto nc = new NativeCrypto()。我遗失了什么?

哪种解决方案更好或有任何其他可用解决方案,以便我可以为 WP8构建FileNotFoundException

感谢任何帮助。 感谢。

1 个答案:

答案 0 :(得分:1)

  

我的问题是:Windows Phone平台是否真的支持OpenSSL。我看到这是真/假我不确定。

不正式。

我知道其中一位OpenSSL开发人员定期为Windows 8构建OpenSSL。我也能够为Windows 8构建。但是......

我为Windows RT和Windows Phone准备了一堆补丁。这些补丁添加了三个新目标,并且它不会使用VC-WIN64A。添加的目标是VC-WP8-X86VC-WP8-ARMVC-WINRT-ARM

我添加了两个新定义(OPENSSL_SYS_WINRTOPENSSL_SYS_WINPHONE),所以很多内容都在继续:

-#if defined(_WIN32) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(OPENSSL_SYS_WINCE) &&
     !defined(OPENSSL_SYS_WINRT) && !defined(OPENSSL_SYS_WINPHONE)

cflags需要一些调整。例如,这里来自Windows RT:

+    $base_cflags.= " /D WINAPI_FAMILY=WINAPI_PARTITION_APP";
+    $base_cflags.= " /FI SDKDDKVer.h /FI winapifamily.h";

和Windows Phone:

+    $base_cflags.= " /D WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP";
+    $base_cflags.= " /AI\"$ENV{'WINDOWSMETADATA'}\"";
+    $base_cflags.= " /FI SDKDDKVer.h /FI winapifamily.h";

Windows RT目标严重瘫痪。作为Windows RT有多糟糕的一个例子:目标需要-DOPENSSL_NO_SOCK-DOPENSSL_NO_DGRAM,因为不允许应用程序访问socket API。这使得它非常无用的SSL库,因为TCP和UDP被毁坏了。

Windows Phone目标好一点。 Windows Phone允许访问socket API(因此TCP和UDP可用),但随机数生成器播种被破坏。它被破坏是因为Microsoft没有提供CryptGenRandom或者用于刮擦状态的旧版Win32屏幕API。应用程序需要从RNGCryptoServiceProvider显式播种。

你可以在Stack Overflow上看到我的痛苦痕迹。例如,Windows RT: where is sockaddr_in?