Hace Mono.NET ¿soporta y compila C++ / CLI?


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

Si no, ¿sabes si tienen planes de apoyarlo?

Author: Brian R. Bondy, 2008-10-08

7 answers

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 de C++/CLI es inherentemente defectuosa y no portable, por lo que ser capaz de compilarla no ayudaría mucho en el caso general.

Puede compilar usando 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 pura 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 portables 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 el propio MS eventualmente eliminará C++/CLI, así que no invierta demasiado en él y cambie a C#.

 22
Author: lupus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-24 12:31:17

Mono ha hecho recientemente algunos grandes avances con la interoperabilidad de C++ en CXXI.

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

  • Consume fácilmente clases de C++ existentes desde C# o cualquier otro. NET idioma
  • Instanciar objetos C++ desde C #
  • Invocar métodos C++ en clases C++ desde código C #
  • Invoque métodos en línea de C++ desde código C # (siempre que su biblioteca esté compilada con -fkeep-inline-functions o que usted proporcione un sustituto biblioteca)
  • Subclase Clases de C++ de C #
  • Anular métodos de C++ con métodos de C#
  • Exponer instancias de clases de C++ o clases mixtas de C++/C# a código de C# y C++ como si fueran código nativo.

CXXI es el resultado de dos veranos de trabajo del Verano de Código de Google para mejorar la interoperabilidad de Mono con el lenguaje C++.

 17
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-29 10:25:46

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

Actualmente no hay soporte para compilar C++/CLI. Ha habido algún trabajo en modificar GCC para emitir IL, pero no está completo (y no parece activo). Ver este artículo.

No creo que Microsoft documente el formato para incluir código nativo en una asamblea, por lo que apoyar esto es difícil.

 9
Author: Rob Walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-08 15:43:34

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

Su readme es aquí y las características para el' generador ' son:

  • Múltiples motores: C++ / CLI y C# P / Invoke
  • ABIs múltiples: Itanium, MS, ARM, iOS y 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 mediante pases de usuario
  • Soporte de trabajo en curso para STL (solo C++/CLI)
  • Api de personalización con tipos fuertes y mapas de tipos

También viene con un montón de cosas interesantes AST y un analizador.

 8
Author: Behrooz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-05 16:57:52

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

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 15:13:42

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

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

 1
Author: Andy Dent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-26 05:40:48

Vaya aquí y busque en "Idiomas que faltan". Pero solo porque no puedas compilar no significa que no puedas ejecutar . Puede compilar su código C++ utilizando el framework sdk e intentar ejecutarlo mediante mono. Vale la pena intentarlo de todos modos.

 0
Author: Kinjal Dixit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-08 15:41:53