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

时间:2008-10-08 15:26:37

标签: .net mono c++-cli

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

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

7 个答案:

答案 0 :(得分:23)

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

您可以使用MS .NET编译器进行编译,并使用以下限制在单声道中运行:

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

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

  4. 请注意,MS本身最终将丢弃C ++ / CLI,因此不要对其投入太多并切换到C#。

答案 1 :(得分:17)

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

From this posting,简短的故事是新的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 ++语言的互操作性。

答案 2 :(得分:9)

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

目前不支持编译C ++ / CLI。已经有一些关于修改GCC以发射IL的工作,但它没有完成(并且不显示活动)。请参阅此article

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

答案 3 :(得分:9)

这是一个非常古老的问题,经过几年的回答非常有趣 截至目前,tritao/CppSharpmono/cxxi最活跃的分支,于2013年被移回mono存储库,并且正在积极开发,因此,当前的树可以在{{ {3}}

他们的自述文件为mono/CppSharp,“生成器”的功能为:

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

它还附带了许多很酷的AST内容和解析器。

答案 4 :(得分:2)

在Mono 2.4上,您可以运行C ++ / CLI应用程序,这些应用程序是在例如Visual Studio 2008 with / clr:safe switch。

答案 5 :(得分:1)

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

作为一种互操作语言,C ++ / CLI的存在使得调用非托管代码成为可能。另一种选择是使用P / Invoke,well-documented虽然存在问题。

答案 6 :(得分:0)

转到here并查看“遗失语言”。但仅仅因为你无法编译并不意味着你不能运行。您可以使用框架sdk编译C ++代码,并尝试使用mono运行它。无论如何都值得尝试。