Pregunta

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

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

¿Fue útil?

Solución

No tenemos un compilador para C ++ / CLI, sería una tarea 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. se ejecuta con mono en cualquier sistema si la aplicación C ++ / CLI está administrada por completo (pero entonces, ¿por qué usar un lenguaje tan feo y no C #?)

  2. se ejecuta con mono en Windows en los otros casos (las aplicaciones C ++ / CLI en general no son portátiles e incluyen código nativo, por lo que pueden ejecutarse solo 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 eliminará C ++ / CLI, así que no invierta demasiado en ella y cambie a C #.

Otros consejos

Mono recientemente ha avanzado bastante con la interoperabilidad de C ++ en CXXI ??.

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

  • Consuma fácilmente las clases de C ++ existentes desde C # o cualquier otro .NET idioma
  • Crear instancias de objetos C ++ de C #
  • Invocar métodos C ++ en clases C ++ desde código C #
  • Invoque métodos en línea C ++ a partir del código C # (siempre que su biblioteca esté compilada con -fkeep-inline-functions o que proporcione un sustituto biblioteca)
  • Subclases de clases de C ++ de C #
  • Anular métodos C ++ con métodos C #
  • Exponga instancias de clases C ++ o clases mixtas C ++ / C # tanto en código 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 ++.

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

Actualmente no hay soporte para compilar C ++ / CLI. Se ha trabajado en modificar GCC para emitir IL, pero no está completo (y no parece estar activo). Vea este artículo .

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

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 nuevo al repositorio mono en 2013 y se está desarrollando activamente desde, El actual El árbol se puede encontrar en mono / CppSharp

Su archivo Léame es aquí y las características para el 'generador' son:

  • Múltiples backends: C ++ / CLI y C # P / Invoke
  • Múltiples ABI: Itanium, MS, ARM, iOS e iOS64
  • Múltiples plataformas: Windows, OS X y Linux
  • Soporte de anulación de tabla virtual
  • Soporte de herencia múltiple
  • Semántica fácilmente extensible a través de pases de usuario
  • Soporte de trabajo en progreso para STL (solo C ++ / CLI)
  • API de personalización fuertemente tipada y mapas de tipo

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

En Mono 2.4 puede ejecutar aplicaciones C ++ / CLI que fueron compiladas en p. ej. Visual Studio 2008 con / clr: interruptor seguro.

No, C ++ / CLI es no compatible en Mono y probablemente nunca lo será aunque esté generando IL puro usando compiladores de MS permitiría que el código totalmente administrado se ejecute en Mono.

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

vaya aquí y mire debajo de " Missing Languages ??" ;. Pero el hecho de que no pueda compilar no significa que no pueda ejecutar . Puede compilar su código C ++ usando el framework sdk e intentar ejecutarlo usando mono. Vale la pena intentarlo de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top