【问题标题】:Can ARM desktop programs be built using visual studio 2012?可以使用 Visual Studio 2012 构建 ARM 桌面程序吗?
【发布时间】:2012-06-22 06:55:04
【问题描述】:

我正在使用 Visual Studio 2012 测试版,我的桌面 (win32) 程序在 ARM 架构中编译得很好。

升级到visual studio 2012 RC后,编译器无法工作并出现以下错误:

“不支持为 ARM 平台编译桌面应用程序”

我发现了一个关于这个的论坛帖子 http://connect.microsoft.com/VisualStudio/feedback/details/745580/arm-configuration-doesnt-work

微软真的切断了 ARM 上的 win32 开发,这对吗? 而在 VS2012 beta 中编译只是侥幸?

【问题讨论】:

  • 是的,您正确阅读了连接发帖。 Windows RT(Windows 8 for ARM)不支持第三方桌面应用程序。因此,不支持在 Visual Studio 中开发它们。
  • 如果你是 MSDN 订阅者或有权访问 Windows Phone/Mobile 代码,你应该看看 cl.exe
  • 现在clever people 已经知道如何在 Windows RT 上运行非 Microsoft 签名的代码,mamaich 的解决方案非常有用。不幸的是,如果您尝试重新编译程序,您可能会发现 ARM 缺少一些重要的 LIB。 no2chem 发布了thread on XDA Developers 解释如何将 DLL 文件转换为 LIB 文件(您需要来自 Windows RT 设备的 DLLS)。
  • 我有一个 DLL 正在执行此操作。如果我想在 C# 和 XAML 应用程序中使用该 DLL,它仍然是“桌面应用程序”吗?

标签: arm visual-studio-2012


【解决方案1】:

您可以编辑文件:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\ARM\Microsoft.Cpp.ARM.Common.props

<PropertyGroup> 部分添加以下行:

<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>

&lt;/PropertyGroup&gt;之前

仅此而已,您可以使用 VS2012 构建 ARM 桌面应用程序。

【讨论】:

  • 请检查该文件是否在其他程序中打开。怎么修改?
  • @mamaich - 我的意思不是听起来粗鲁,但微软是否批准了这一点? (我正在寻找一种 Microsoft 批准的方法来避免错误,因为这是一个真实的项目,而不是类似 XDA 的黑客(无意冒犯 XDA 人员)。
  • 啊,这很有趣......这个技巧只修复了 IDE。如果您进入命令行,您仍然会收到错误消息。事后看来,这是有道理的。
  • @jww 对于专业项目,为什么不使用受支持的 ARM 交叉编译器,例如 GCC 等?
  • 在 VS2017 的情况下,我修改了以下文件,它工作得很好:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Platforms\ ARM64\PlatformToolsets\v141\Toolset.targets
【解决方案2】:

通过在 C:\Program Files (x86) 的 cl 的 ARM 版本中添加“/D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE”命令行参数,我能够绕过该错误并为 ARM 编译一个小的“hello world”cpp 文件\Microsoft Visual Studio 11.0\VC\bin\x86_arm。我发现#define from sn0w's answer on this question in crtdefs.h 文件,无需修改该文件。现在,我不能保证任何更复杂的东西会真正起作用,或者微软没有为 Windows RT 桌面应用程序建立某种白名单或数字签名验证,所以即使它可以编译,也可能不允许运行当 Windows RT 最终可用时。

请注意,在从命令行运行 ARM 版本的 cl.exe 之前,您必须使用此批处理文件设置环境变量:“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin \x86_arm\vcvarsx86_arm.bat"

【讨论】:

  • 挑剔:当使用 mamaich 的技巧在 Visual Studio 下编译时,VS 应用 /D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
【解决方案3】:

即使您编译该应用程序,也无法在 Windows 8 RT 上运行它,因为未签名的应用程序将无法启动。

我刚刚测试了这个,很不幸是这样。

您收到以下消息:
Windows cannot verify the digital signature of this file

我想可能有一个解决方法,但它永远不会得到官方支持。

【讨论】:

【解决方案4】:

当然可以。我用 VS2012 RC 练习过。 现在我将解释如何避免“不支持为 ARM 平台编译桌面应用程序”并构建 win32 应用程序。

第一种方法:修复构建工具 - 目标是修补(或尝试用 beta 版本替换)MSBuild 的库:Microsoft.Build.CPPTasks.Common.v110.dll

第二种方式:从Visual Studio Tools开始菜单运行“VS2012 ARM Cross Tools Command Prompt”,然后执行cl [cl params] myfile1.cpp myfile2.cpp myres.res ... /link [linkparams]

对于这两种情况,您还需要在 crtdefs.h 的第 332 行注释掉 #error 指令。(Microsoft Visual Studio 11.0\VC\include)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多