34

Mono .NET 是否支持和编译 C++/CLI?

如果没有,你知道他们是否有支持它的计划吗?

4

7 回答 7

26

我们没有用于 C++/CLI 的编译器,对于非常小的用户群来说,这将是一项非常大的工作。还要考虑到 C++/CLI 规范本身就有缺陷且不可移植,因此在一般情况下能够编译它并没有多大帮助。

您可以使用 MS .NET 编译器进行编译并在具有以下限制的情况下以单声道运行:

  1. 如果 C++/CLI 应用程序是纯托管的,那么可以在任何系统上使用 mono 运行(但是,为什么要使用如此丑陋的语言而不是 C#?)

  2. 在其他情况下,在 windows 上使用 mono 运行(C++/CLI 应用程序通常是不可移植的,并且包含本机代码,因此它们只能在 windows 上运行,并且对于 mono 的主要目标是在 Linux 上运行托管程序无趣)

请注意,MS 本身最终会放弃 C++/CLI,所以不要在它上面投入过多并切换到 C#。

于 2008-10-11T11:13:04.490 回答
17

Mono 最近在CXXI中的 C++ 互操作性方面取得了相当大的进步。

从这篇文章中可以看出,新的 CXXI 技术允许 C#/.NET 开发人员:

  • 从 C# 或任何其他 .NET 语言轻松使用现有的 C++ 类
  • 从 C# 实例化 C++ 对象
  • 从 C# 代码调用 C++ 类中的 C++ 方法
  • 从 C# 代码调用 C++ 内联方法(前提是您的库是使用 -fkeep-inline-functions 编译的或者您提供了代理库)
  • 从 C# 继承 C++ 类
  • 用 C# 方法覆盖 C++ 方法
  • 向 C# 代码和 C++ 公开 C++ 类或混合 C++/C# 类的实例,就好像它们是本机代码一样。

CXXI 是 Google Summer of Code 两个暑期工作的成果,旨在提高 Mono 与 C++ 语言的互操作性。

于 2012-01-29T10:25:46.980 回答
11

Mono 能够运行由 C++/CLI 生成的“纯”程序集,即。那些不包含任何本机代码的。MSDN上记录了 C++ 编译器支持的各种 /clr 选项。

目前不支持编译 C++/CLI。已经有一些关于修改 GCC 以发出 IL 的工作,但它并不完整(并且看起来不活跃)。见这篇文章

我不相信 Microsoft 记录了在程序集中包含本机代码的格式,因此很难支持这一点。

于 2008-10-08T15:43:34.490 回答
10

这是一个非常古老的问题,几年后得到了非常有趣的答案。
截至目前,tritao/CppSharpmono/cxxi开发最活跃的分支,它于 2013 年移回mono存储库,并且从那时起一直在积极开发,当前的树可以在mono/CppSharp找到

他们的自述文件在这里,“生成器”的功能是:

  • 多个后端:C++/CLI 和 C# P/Invoke
  • 多个 ABI:Itanium、MS、ARM、iOS 和 iOS64
  • 多平台:Windows、OS X 和 Linux
  • 虚拟表覆盖支持
  • 多重继承支持
  • 通过用户通行证轻松扩展语义
  • 对 STL 的工作中支持(仅限 C++/CLI)
  • 强类型自定义 API 和类型映射

它还带有很多很酷的 AST 东西和一个解析器。

于 2015-07-05T16:57:52.043 回答
2

不,Mono不支持C++/CLI,并且可能永远不会支持,尽管使用 MS 编译器生成纯 IL 将允许完全托管的代码在 Mono 下运行。

作为一种互操作语言,C++/CLI 的存在使得调用非托管代码成为可能。另一种选择是使用 P/Invoke,尽管存在问题,但它有据可查。

于 2009-01-26T05:40:48.700 回答
2

在 Mono 2.4 上,您可以运行在带有 /clr:safe 开关的 Visual Studio 2008 下编译的 C++/CLI 应用程序。

于 2009-04-09T15:13:42.950 回答
0

这里看看“缺少的语言”。但不能编译不代表不能运行。您可以使用框架 sdk 编译您​​的 C++ 代码并尝试使用单声道运行它。总之值得一试。

于 2008-10-08T15:41:53.603 回答