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:
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 #?)
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 #.