我正在创建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
。
感谢任何帮助。 感谢。
答案 0 :(得分:1)
我的问题是:Windows Phone平台是否真的支持OpenSSL。我看到这是真/假我不确定。
不正式。
我知道其中一位OpenSSL开发人员定期为Windows 8构建OpenSSL。我也能够为Windows 8构建。但是......
我为Windows RT和Windows Phone准备了一堆补丁。这些补丁添加了三个新目标,并且它不会使用VC-WIN64A
。添加的目标是VC-WP8-X86
,VC-WP8-ARM
和VC-WINRT-ARM
。
我添加了两个新定义(OPENSSL_SYS_WINRT
和OPENSSL_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?。