Does Mono .NET support and compile C++ / CLI?

2019-01-07 17:45发布

Does Mono .NET support and compile C++ / CLI?

If not, do you know if they have any plans of supporting it?

7条回答
太酷不给撩
2楼-- · 2019-01-07 18:11

On Mono 2.4 you can run C++/CLI applications which were compiled under e.g. Visual Studio 2008 with /clr:safe switch.

查看更多
看我几分像从前
3楼-- · 2019-01-07 18:13

Mono has recently made some pretty big strides with C++ interoperability in CXXI.

From this posting, the short story is that the new CXXI technology allows C#/.NET developers to:

  • Easily consume existing C++ classes from C# or any other .NET language
  • Instantiate C++ objects from C#
  • Invoke C++ methods in C++ classes from C# code
  • Invoke C++ inline methods from C# code (provided your library is compiled with -fkeep-inline-functions or that you provide a surrogate library)
  • Subclass C++ classes from C#
  • Override C++ methods with C# methods
  • Expose instances of C++ classes or mixed C++/C# classes to both C# code and C++ as if they were native code.

CXXI is the result of two summers of work from Google's Summer of Code towards improving the interoperability of Mono with the C++ language.

查看更多
We Are One
4楼-- · 2019-01-07 18:16

This is a very old question with very interesting answers after some years.
As of right now tritao/CppSharp is the most actively developed fork of mono/cxxi which was moved back to the mono repository in 2013 and is being actively developed since, The current tree can be found at mono/CppSharp

Their readme is here and the features for the 'generator' are:

  • Multiple backends: C++/CLI and C# P/Invoke
  • Multiple ABIs: Itanium, MS, ARM, iOS and iOS64
  • Multiple platforms: Windows, OS X and Linux
  • Virtual table overriding support
  • Multiple inheritance support
  • Easily extensible semantics via user passes
  • Work-in-progress support for STL (C++/CLI only)
  • Strongly-typed customization APIs and type maps

It also comes with a lot of cool AST stuff and a parser.

查看更多
\"骚年 ilove
5楼-- · 2019-01-07 18:16

No, C++/CLI is not supported under Mono and likely never will be although generating pure IL using MS compilers would allow totally managed code to run under Mono.

As an interop language, C++/CLI exists to make it possible to call unmanaged code. The other alternative is using P/Invoke which is well-documented albeit with problems.

查看更多
冷血范
6楼-- · 2019-01-07 18:17

go here and look under "Missing Languages". But just because you cant compile does not mean that you cant run. You can compile your C++ code using the framework sdk and try running it using mono. Worth trying anyway.

查看更多
干净又极端
7楼-- · 2019-01-07 18:34

We don't have a compiler for C++/CLI, it would be a very large undertaking for a very small userbase. Consider also that the C++/CLI spec is inherently flawed and non-portable, so being able to compile it wouldn't help much in the general case.

You can compile using the MS .NET compiler and run in mono with these restrictions:

  1. run with mono on any system if the C++/CLI app is pure managed (but then, why use such an ugly language and not C#?)

  2. run with mono on windows in the other cases (C++/CLI apps are in general non-portable and include native code, so they can run only on windows and are uninteresting for the major objective of mono which is to run managed programs on Linux)

Note that MS itself will eventually drop C++/CLI, so don't invest too much on it and switch to C#.

查看更多
登录 后发表回答