在Windows应用商店和电话应用程序中使用Boost库

增强包含 很多 高品质的跨平台C++库。Boost中的一些库使用Windows应用商店和电话应用程序中不可用的api。为了改善体验,微软一直致力于启用一些Boost库。

null

我们对Boost构建系统进行了改进,以支持针对Windows商店和电话的Windows运行时。此外,我们还对以下Boost库进行了修改,使其适用于Windows应用商店和手机:system、chrono、dateu time、smartu ptr、signals2和thread。除了这些Boost库之外,其他许多库都不使用任何被禁止的api,工作正常。这篇文章展示了如何在Windows应用程序中构建和利用Boost的一部分。

下载并安装Boost源代码

下面是下载和设置用于构建的Boost源代码的步骤。Boost已经转移到 github ,现在使用Git子模块。有关模块化Boost的更多详细信息,请访问 在这里 .

  • 克隆增强和建立设置。请注意,这是一个一次性操作,将需要一段时间,因为它带来了所有的升压源。在本文中,假设您克隆到了C:oost。

  • 将构建工具b2添加到Path环境变量中。如果您使用的是PowerShell,请执行以下操作。

    • $env:Path += “;C:oost“;
  • 启用Windows运行时的一些更改尚未迁移到“主”分支,或者仍在等待合并。对于这些,您需要签出“开发”分支或从我的私有分支中提取包含必要更改的内容。

增强。构建

    • cd C:oost oolsuild
    • git签出开发

Boost.配置

Boost.Thread–只有在使用线程或依赖它的库时才需要可选

Windows应用商店和电话大楼

使用最新的Boost源代码和存储库设置,您现在可以开始构建了。如果您感兴趣的Boost库只是头文件,比如Boost.Signals2,那么您不需要构建,可以完全跳过这一步。在我们启用和验证的库中,系统、计时、线程和日期时间是唯一需要构建的库。

为了方便地定位Windows运行时,Boost构建系统中添加了一个名为“windowsapi”的新功能。它接受值“store”、“phone”,如果未指定,则默认为“desktop”。

要生成,请转到要使用的库下的生成目录,例如,要生成Boost.Thread 32位debug for Windows 8.1用于静态链接的存储,请使用以下命令:

  • cd C:oostlibs线程构建
  • b2工具集=msvc-12.0链接=静态windows api=存储

关于工具集和目标,指定的工具集决定了目标的Windows版本:

  • Windows 8.0:                toolset=msvc-11.0 windows api=store
  • Windows 8.1:                toolset=msvc-12.0 windows api=store
  • Windows Phone 8.0版:     toolset=msvc-11.0 windows api=phone
  • Windows Phone 8.1版:     toolset=msvc-12.0 windows api=phone

内置的Boost特性变量、地址模型、体系结构、链接可用于生成调试/发布、x86/x64/arm和静态/共享二进制文件。例如,以下内容构建了版本配置,并为ARM体系结构提供了静态链接:

b2工具集=msvc-12.0变量=发布链接=静态体系结构=arm windows api=存储

更详细的信息可以在Boost.Build中找到 文档 .

一旦构建,二进制文件将输出到bin.v2文件夹下。具体位置取决于使用的选项和生成的库的名称。对于以前用于生成Boost.Thread的命令,二进制文件位于:

C:oostin.v2libs-hreaduildmsvc-12.0debuglink-static-hreading多窗口api存储

请注意,Visual Studio 2013未包含vcvarsphone安装脚本,因此您将无法将目标锁定为Phone 8.1现成版本。在这篇博文中,我加入了针对WindowsPhone8.1的手机安装脚本。要设置它们,请在VC Visual Studio安装目录C:Program Files(x86)Microsoft Visual Studio 12.0VC下创建名为WPSDKWP81的文件夹,然后将电话安装脚本文件复制到中。

如何在应用程序中使用

在所有的安装和构建完成之后,在应用程序中使用与任何其他C++库都是一样的。通过添加C:oost设置include路径。如果您使用的Boost库不是仅头文件,则链接到lib并将dll添加到项目中(如果不使用静态链接),确保将“Content”属性设置为true,以便将其用于应用程序部署。

为了帮助说明如何在应用程序中设置和使用,在本文的最后,我提供了一个简单的示例windows8.1应用程序,它使用了thread和signal2库。样品 以不同的方式使用Boost线程创建具有多个插槽的简单信号。 本示例假设您将Boost克隆到C:oost目录中,并为Boost.Thread、Boost.Dateu Time、Boost.Chrono和Boost.System构建静态链接,如果不是这样,则需要更新include和library路径。该示例还包括针对WindowsPhone8.1的vcvars安装脚本。

反馈以及如何启用更多的Boost库

对于您的下一个Windows应用商店和手机应用程序,请尝试使用,并让我们知道进展如何。有几个人已经在尝试,Spotify正在使用他们公司的几个库 Windows Phone应用程序 .

并非Boost中的所有库都在Windows商店和Phone中工作,但是我们所做的工作使构建、替换或更新被禁止的api变得更加容易。如果您想要使用的Boost库中有一个不起作用,根据被禁止的API,它可能很容易被替换。我们添加了几个新的 增强。预定义 ,宏。通过包含您可以使用boostu PLATu WINDOWSu桌面和boostu PLATu WINDOWSu运行时宏来测试目标平台。例如,如果使用了对WaitForSingleObject的调用(仅在桌面中允许),则可以通过检查Windows运行时的宏将其替换为WaitForSingleObjectEx:

#包括 … #如果BOOSTu PLATu WINDOWSu运行时 WaitForSingleObjectEx(句柄,无限,FALSE); #其他 WaitForSingleObject(句柄,无限); #结束

对于更复杂的API替换示例,您可以查看我为其所做的更改 推进。线程 .

我们有兴趣听取您的反馈。您关心什么Boost库,或者在Windows应用商店和手机应用程序中使用什么?

BoostSample.zip文件

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享