繁体   English   中英

为WP8平台构建本机OpenSSL库

[英]Build native OpenSSL library for WP8 Platform

我正在创建Windows phone 8应用程序。我需要创建使用已编译的OpenSSL库的App。我遵循标准的最新库。

我正在按照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 。我看到是真/假我不确定。

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

但是当我尝试创建引用NativeCrypto nc = new NativeCrypto()我在该库中得到了FileNotFoundException 。我错过了什么?

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

任何帮助表示赞赏。 谢谢。

我的问题是: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可用),但随机数生成器播种被破坏。 它破碎是因为微软没有提供CryptGenRandom或用于刮擦状态的旧版Win32屏幕API。 应用程序需要从RNGCryptoServiceProvider显式种子。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM