【问题标题】:Can Windows Store applications be built with Mingw?可以使用 Mingw 构建 Windows 应用商店应用程序吗?
【发布时间】:2012-10-06 05:23:37
【问题描述】:

有没有办法使用Mingw 工具链构建 Windows 应用商店应用程序? (最终cross compile他们来自 Linux 上的 mingw,因为如果它在一个 Mingw 工具链中工作,它应该在另一个工具链中工作。)

我想一个要求是在 Windows 应用商店应用沙箱中stick tothe API:s allowed,但在分发到商店之前还有哪些其他事项需要考虑? XAML? 32 位还是 64 位代码?

由于 Mingw C++ 与 MSVC++ 的链接不兼容,我认为没有 WRL 的纯 C 程序将是实现这一目标的最简单方法?

【问题讨论】:

  • 感谢您提供指向 MXE 的链接,以前从未听说过那个...一定是我一段时间以来看到的最酷的东西。
  • @Damon,我前几天看到的时候也是这么想的,我觉得我必须在这里放一个链接,这样别人才能看到它。这真的很酷。 :-)
  • 如果您尝试运行它,可能会找不到其中一个库,只需从镜像中下载并将其放入 pkg/ 目录中即可恢复编译。 @达蒙
  • @Damon,原来是core.ring.gr.jp/pub/graphics/gd/gd-2.0.35.tar.bz2我必须手动下载。
  • 在运行 aptitude 以安装 2 个缺失的部门后,对我来说几乎是开箱即用的工作。

标签: c windows-8 mingw cross-compiling windows-store-apps


【解决方案1】:

您需要直接使用Windows Runtime C++ Template Library (WRL),您将无法使用C++/CX,因为 Mingw 不支持它。除此之外,我认为您只需要Windows 8 SDK,然后您需要配置 Mingw 以使用标头和库。此外,您将无法使用XAML 来描述您的用户界面,您必须在代码中手动创建您的 UI。

与其尝试使用 mingw 编写整个应用程序并使用 linux 进行交叉编译,不如使用 mingw 编写核心库,然后使用 Visual Studio Express(免费)在库上编写一个简单的 UI 包装器。这样你就可以使用所有的好东西,比如 XAML 和引用计数实例。

这是我采用的方法 - 使用用 C++ 编写的库,然后使用引用其他库的单独 UI 项目(使用 XAML)。效果很好。

【讨论】:

  • 需要 Windows 8 SDK 的任何特殊原因?为版本
  • 页面显示“WRL 使您能够更轻松地实现和使用组件对象模型 (COM) 组件。” ...但是从 C 中您可以直接调用 COM 对象,而无需 WRL 包装器。所以我也不认为 WRL 是必要的,除非你为此添加一些证据。抱歉,您的回答只是给我留下了更多问题。 :-)
  • 如果您要使用 WRL,则需要 Windows 8 SDK,如果您不打算使用 WRL 来包装 COM 调用,则可能不需要它。
  • 我不能 100% 确定,因为我还没有尝试过,但我认为您不需要链接到任何 WinRT 库,因为它们都是通过 COM 访问的。这对我来说现在是一个灰色区域:)
  • 你可以看看 cppwinrt github.com/Microsoft/cppwinrt 我用 mingw64 编译/链接...唯一的问题是,我需要为不同的接口手动定义 UUID....哪个mingw不知道。也许有人将 mingw 标头更新为 windows10 SDK。我不知道这是如何工作的。
【解决方案2】:

MinGW-w64 具有对随 VS2013 分发的 UWP C 运行时的实验性支持。与通用 VS2013 crt 链接的 C dll 也可以与 VS2015 和 VS2017 UWP 工具链一起使用(UWP 项目应具有“Microsoft Visual C++ 2013 Runtime Package for Windows Universal”作为依赖项)。
MinGW-w64 提供winstorecompat 库,将UWP 平台上一些禁止的API 调用替换为用户定义的实现。 winstorecompat 应该在链接到系统库之前链接到用户的库。
此外,还需要使用自定义标志 -Wl,--dynamicbase 构建 MinGW C dll 以通过 Windows 10 应用商店认证工具包安全检查,并将appcontainer 位标志设置为与 Windows 10 应用商店二进制要求兼容。
这里是link 示例项目,我研究了如何将纯 C MinGW Dll 用于 Windows 10 C# UWP 应用程序、来自 C dll 的 PInvoke 方法并通过认证工具包安全检查以在 Windows 应用商店中发布。我已经引用了libVLC WinRT 构建实现。

【讨论】:

  • 不错!我喜欢它,我为你的回购加注了星标。我知道这是您的回购,因为您要求提供反馈,但也许您应该在回答中明确说明。除非事先声明,否则有些人会反对自我推销。
  • @Prof.Falken 知道了,谢谢,实际上,如果有人尝试在实际应用中使用它以在商店中发布,我会更感兴趣。认证工具包未显示示例 UWP 应用程序包的任何问题,但其他一些问题可能会照常出现...
  • 我会在一段时间内提供更多技术细节来回答。
【解决方案3】:

看看使用 C++/WinRT 和 clang 编译器而不是 MinGW:

https://github.com/Microsoft/cppwinrt
https://moderncpp.com/

“C++/WinRT 是仅在头文件中实现的 Windows 运行时的标准 C++ 语言投影。它允许您使用任何符合标准的 C++ 编译器来创作和使用 Windows 运行时 API。”

“C++/WinRT 依赖于 C++17 语言功能,因此您需要告诉 C++ 您的项目需要 C++17 语言标准。”

“虽然 Visual C++ 仍然是我们的主要目标,但我们使用 Clang 作为辅助编译器以确保标准一致性。在此更新中进行了许多小的更改以支持 Clang 构建并修复仅在 Clang 中发现的正确性错误构建。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多