what que net gui dotnet avalonia .net mono c++-cli

que - ¿Mono.NET admite y compila C++/CLI?



gui dotnet core (7)

¿Mono .NET admite y compila C ++ / CLI?

Si no, ¿sabes si tienen algún plan para apoyarlo?


Mono es capaz de ejecutar ensamblajes "puros" generados por C ++ / CLI, es decir. unos que no contienen ningún código nativo. Las diversas opciones / clr admitidas por el compilador C ++ están documentadas en MSDN .

Actualmente no hay soporte para compilar C ++ / CLI. Se ha trabajado en la modificación de GCC para emitir IL, pero no está completo (y no aparece activo). Vea este artículo .

No creo que Microsoft documente el formato para incluir código nativo en un ensamblado, por lo que es difícil admitir esto.


ve aquí y busca en "Idiomas perdidos". Pero solo porque no puedes compilar no significa que no puedas correr . Puede compilar su código C ++ utilizando el framework sdk e intentar ejecutarlo usando mono. Vale la pena intentar de todos modos.


No, C ++ / CLI no es compatible con Mono y probablemente nunca lo será, aunque generar IL puro utilizando compiladores de MS permitiría que el código totalmente administrado se ejecute bajo Mono.

Como lenguaje de interoperabilidad, C ++ / CLI existe para que sea posible llamar al código no administrado. La otra alternativa es usar P / Invoke, que está bien documentado aunque con problemas.


En Mono 2.4 puede ejecutar aplicaciones C ++ / CLI compiladas bajo, por ejemplo, Visual Studio 2008 con el modificador / clr: safe.


Recientemente, Mono ha hecho grandes progresos con la interoperabilidad de C ++ en CXXI .

De esta publicación , la historia corta es que la nueva tecnología CXXI ​​permite a los desarrolladores de C # / .NET:

  • Consuma fácilmente clases existentes de C ++ desde C # o cualquier otro lenguaje .NET
  • Crear instancias de objetos C ++ desde C #
  • Invoque métodos C ++ en clases C ++ desde el código C #
  • Invoque métodos en línea de C ++ a partir del código C # (siempre que su biblioteca esté compilada con -fkeep-inline-functions o que proporcione una biblioteca sustituta)
  • Clases de subclase C ++ de C #
  • Sobrescribir los métodos C ++ con los métodos C #
  • Exponga instancias de clases de C ++ o clases mixtas de C ++ / C # tanto en el código de C # como en C ++ como si fueran código nativo.

CXXI es el resultado de dos veranos de trabajo del Summer of Code de Google para mejorar la interoperabilidad de Mono con el lenguaje C ++.


Esta es una pregunta muy antigua con respuestas muy interesantes después de algunos años.
A partir de ahora, tritao / CppSharp es la bifurcación más desarrollada de mono / cxxi que se movió de vuelta al repositorio mono en 2013 y se está desarrollando activamente desde entonces. El árbol actual se puede encontrar en mono / CppSharp

Su archivo léame está aquí y las características para el ''generador'' son:

  • Backends múltiples: C ++ / CLI y C # P / Invoke
  • Múltiples ABI: Itanium, MS, ARM, iOS y iOS64
  • Múltiples plataformas: Windows, OS X y Linux
  • Mesa virtual que anula el soporte
  • Soporte de herencia múltiple
  • Semántica fácilmente extensible a través de pases de usuario
  • Soporte de trabajo en progreso para STL (C ++ / CLI solamente)
  • API de personalización fuertemente tipadas y mapas de tipos

También viene con muchas cosas geniales de AST y un analizador sintáctico.


No tenemos un compilador para C ++ / CLI, sería una empresa muy grande para una base de usuarios muy pequeña. Considere también que la especificación C ++ / CLI es inherentemente defectuosa y no portátil, por lo que poder compilarla no ayudaría mucho en el caso general.

Puede compilar utilizando el compilador MS .NET y ejecutar en mono con estas restricciones:

  1. ejecutar con mono en cualquier sistema si la aplicación C ++ / CLI es puramente administrada (pero entonces, ¿por qué usar un lenguaje tan feo y no C #?)

  2. ejecutar con mono en Windows en los otros casos (las aplicaciones C ++ / CLI son en general no portátiles e incluyen código nativo, por lo que solo pueden ejecutarse en Windows y no son interesantes para el objetivo principal de mono que es ejecutar programas administrados en Linux)

Tenga en cuenta que la propia MS eventualmente dejará caer C ++ / CLI, por lo que no invierta demasiado en ella y cambie a C #.