通过LLVM或GCC针对WinRT进行编译的目标

6

LLVM和GCC都支持Objective-C,我很喜欢这种语言。因此,我有兴趣使用LLVM或GCC以及可能使用MinGW来定位WinRT本地代码。

虽然我感兴趣的问题应该很容易通过Google搜索得到答案,但我找不到任何突出的信息:LLVM或GCC是否支持定位WinRT?


英特尔有一篇关于使用 Intel C++ 编译器 13.0 与 Visual Studio 2012 的文章,其中可能包含有用的提示。

此外,还有一个几乎重复的问题


WinRT可能对于某些人来说太新了,以至于还没有人将GCC或LLVM移植到它上面。如果你非常熟悉WinRT,你可以尝试自己移植(可能从一些现有的东西开始)。然后,请在适当的自由软件许可下发布你的补丁。 - Basile Starynkevitch
这可能需要微软的帮助才能完成。WinRT已经被锁定了。 - David Heffernan
上面的英特尔页面仅讨论如何使英特尔C/C++编译器协作构建Windows Store的x86应用程序,例如基于x86-ISA的设备集合{Surface Pro、Surface Pro 2、台式机、笔记本电脑等}。上述英特尔页面未提及英特尔编译器进行跨平台编译到竞争对手(即ARM)的ISA。 - Andreas ZUERCHER
我没有注意到我在某个地方提到了ARM。也许你被命名法所困惑了:WinRT是API,Windows RT是操作系统。 - Ivan Vučica
2个回答

2

现在,Clang已经完全支持Windows上的本地C和C++,具有本地ABI等功能。如果有一个用于WinRT的C或C++ API,则您应该可以轻松使用使用Clang在Windows上编译的代码调用它。

这并没有直接将ObjC连接到WinRT,但是如果您愿意,您可以潜在地编写代码来构建这样的连接。


0

目前,您只能使用MSVC。虽然访问API本身并不是不可能的(它基本上是带有一些花哨功能的COM),但在没有通过某些钩子进行跳转的情况下,将其与Objective-C接口化可能不会很有趣。

我最初看到的一个问题是Objective C不支持命名空间,并且从Objective C中使用WinRT API可能不会很有趣。 PPL 可用于C++,在C#中有await关键字,但在Objective-C中使用所有这些...Async方法...您可能不想要那个;)


命名空间理论上可以通过将命名空间实现为一个类(“命名空间类”),其中包含更多的命名空间类以及实际的类等来模拟。另一方面,我感兴趣的只是能够编译任何东西 - 基本上只需使用MinGW从C打开一个Metro UI屏幕并带有一个单独的按钮即可。如果我可以使用MinGW中的C,我可以为我的游戏编写一个使用Objective-C的包装器;-) - Ivan Vučica
此外,编译器和链接器需要支持 .winmd 文件,因此我认为这不是您可以期望很快实现的事情。 - Marcus Ilgner
看起来许多.winmd文件只是普通的PE .dlls- http://www.codeproject.com/Articles/476957/WINMDplusFilesplusUnderplustheplusHood 尽管有时它们仅包含类描述/引用:http://mariusbancila.ro/blog/2011/10/30/winrt-and-winmd-files/ 也许我们可以通过动态加载.winmd并使用COM实例化对象来避免这种情况? - Ivan Vučica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接