我正在创建 Windows Phone 8 应用程序。我需要创建使用已编译的 OpenSSL
库的应用程序。我正在关注 standard最新的库。
我正在执行 INSTALL.W64
步骤,因为我不知道要使用哪个 INSTALL.*。因为我的机器是 64 位的,所以我更喜欢这个:
为 Win64/x64 构建:
1 perl配置VC-WIN64A
2 毫秒\do_win64a
3 nmake -f ms\ntdll.mak
4 cd out32dll
5 ..\毫秒\测试
使用 Visual Studio 命令提示符。到第 2 步没问题。在第 3 步它无法构建并且不会在 out32dll 文件夹中创建库。它给出如下错误:
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中编译得到构建。在Windows Phone 8项目中引用OpenSSLWP8
。编译libeay32
。
但是当我尝试创建引用 NativeCrypto nc = new NativeCrypto()
时,我在那个库中得到了 FileNotFoundException
。我是不是遗漏了什么?
哪个解决方案更好,或者有任何其他可用的解决方案,以便我可以为 WP8 构建 OpenSSL
。
感谢任何帮助。 谢谢。
最佳答案
My question is: Is really OpenSSL supported for Windows Phone Platform. As I seen this which is true/false I am not sure.
不是官方的。
我知道一位 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。这使得它变得毫无用处,因为 TCP 和 UDP 被破坏了。
Windows Phone 目标要好一些。 Windows Phone 允许访问 socket
API(因此 TCP 和 UDP 可用),但随机数生成器播种被破坏。它被破坏是因为 Microsoft 不提供 CryptGenRandom
或用于抓取状态的较旧的 Win32 屏幕 API。应用程序需要从 RNGCryptoServiceProvider
中显式播种。
您可以在 Stack Overflow 上看到我受苦的痕迹。例如,Windows RT: where is sockaddr_in? .
关于c# - 为 WP8 平台构建原生 OpenSSL 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322250/