使用Boost Thread的Wi​​ndows 10 UAP App无法在手机

时间:2015-12-22 16:25:15

标签: multithreading boost windows-runtime windows-phone win-universal-app

我有一个使用Boost库的应用程序。在桌面上,Windows UAP应用程序按预期工作,但是,在手机(真实手机或模拟器)上,应用程序在启动时崩溃,并且无法进行调试。

似乎问题来自boost :: thread库。

以下是重现此问题的简单步骤:

  • 从命令行构建boost boost和date_time(date_time似乎需要链接):b2 --with-thread --with-date_time toolset=msvc-14.0 variant=debug link=static architecture=x86 windows-api=store cxxflags="/AIC:/winrt"。请注意" C:/ winrt"是" C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ lib \ store \ references"其中platform.winmd(因为它似乎需要构建)
  • 使用Visual Studio 2015创建一个空白C ++ Windows 10 Universal应用程序。
  • 编辑Mainpage.xaml.cpp并添加对boost :: thread的调用,如:boost::thread workerThread(workerFunc);其中&#34; workerFunc&#34;是你想要的任何功能。添加所需的包含文件(#include <boost/thread/thread.hpp>)。在link选项中,添加boost thread lib。
  • 现在在手机模拟器中运行该应用程序。
  • 结果:应用程序将在加载时崩溃。

这种情况发生在带有手臂CPU的真实手机上(使用选项architecture=arm构建了boost)。使用为仿真器构建的相同应用程序无法在桌面计算机上重现此问题。只需在您的语言环境机器上运行该应用程序即可。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

问题似乎是Windows UAP项目默认链接到库中,这些库在手机中不可用,例如ole32.lib。因此它在桌面上编译和工作,但在手机上崩溃,并且没有关于哪个DLL创建问题的信息。此外,microsoft的app验证软件不提供任何有关该软件的信息。

答案 1 :(得分:0)

我也遇到了类似的问题,应用程序在桌面上工作正常但无法在Windows手机模拟器中加载。我运行了认证工具包,发现应用程序正在使用受限api(advapi32.dll中的CryptGenRandom)。删除该特定函数调用已解决的问题。