c# - 为 WP8 平台构建原生 OpenSSL 库

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

我正在创建 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-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。这使得它变得毫无用处,因为 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/

相关文章:

c# - ASP.NET 对话框建议

javascript - Javascript 中包含的 C# 代码还需要编译吗?

c++ - C++中链表的队列实现

c++ 我更改了我的列表(和代码),因此它现在处理 Node* 而不是 Node 对象,并且它导致了 undefined reference 错误

javascript - window.open 在 Windows Phone 8 上返回 null

checkbox - 我可以更改 LongListMultiSelector 中的 CheckBox 颜色吗? WP8

javascript - 让网络字体在 HTML5 Windows Phone 应用程序上工作?

c# - 如何在 Bot Framework (C# SDK) 中的单个 Luis 对话框中集成多个 Luis 语言模型

c# - Visual Studio 2005 清理解决方案

c++ - 我的同事喜欢使用memset初始化struct,我怎样才能说服他不要这样做?