Mono .NET是否支持并编译C++/CLI?
如果没有,你知道他们是否有任何支持它的计划?
我们没有C++/CLI的编译器,对于非常小的用户群来说,这将是一项非常大的工作.还要考虑C++/CLI规范本质上是有缺陷的和不可移植的,因此能够编译它在一般情况下没有多大帮助.
您可以使用MS .NET编译器进行编译,并使用以下限制在单声道中运行:
如果C++/CLI应用程序是纯托管的,那么在任何系统上使用mono运行(但是,为什么要使用这种丑陋的语言而不是C#?)
在其他情况下,在Windows上使用mono运行(C++/CLI应用程序通常是非可移植的并且包含本机代码,因此它们只能在Windows上运行,并且对于在Linux上运行托管程序的mono的主要目标而言无趣)
请注意,MS本身最终将丢弃C++/CLI,因此不要对它投入太多并切换到C#.
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夏季代码的两个夏季工作的结果,旨在提高Mono与C++语言的互操作性.
Mono能够运行由C++/CLI生成的"纯"程序集,即.那些不包含任何本机代码的.MSDN上记录了C++编译器支持的各种/ clr选项.
目前不支持编译C++/CLI.已经有一些关于修改GCC以发射IL的工作,但它没有完成(并且不显示活动).看到这篇文章.
我不相信Microsoft会记录在程序集中包含本机代码的格式,因此很难对此进行支持.
这是一个非常古老的问题,经过几年的回答非常有趣.
截至目前,tritao/CppSharp是最活跃的mono/cxxi分支,于2013年被移回单声道存储库,并且正在积极开发,目前的树可以在mono/CppSharp找到
他们的自述文件在这里,"发电机"的功能是:
多个后端:C++/CLI和C#P/Invoke
多个ABI:Itanium,MS,ARM,iOS和iOS64
多个平台:Windows,OS X和Linux
虚拟表覆盖支持
多重继承支持
通过用户传递轻松扩展语义
STL的在制品支持(仅限C++/CLI)
强类型自定义API和类型映射
它还带有很多很酷的AST东西和解析器.