Question

Mono .NET prend-il en charge et compile-t-il C ++ / CLI?

Si non, savez-vous s’ils ont l’intention de le soutenir?

Était-ce utile?

La solution

Nous n’avons pas de compilateur pour C ++ / CLI, ce serait une très grosse entreprise pour une très petite base d’utilisateurs. Pensez également que la spécification C ++ / CLI est intrinsèquement défectueuse et non portable. Par conséquent, le compiler n’aiderait pas beaucoup dans le cas général.

Vous pouvez compiler à l'aide du compilateur MS .NET et l'exécuter en mono avec les restrictions suivantes:

  1. fonctionne en mono sur n’importe quel système si l’application C ++ / CLI est gérée à 100% (mais pourquoi utiliser un langage aussi laid et non pas C #?)

  2. fonctionne avec mono sur Windows dans les autres cas (les applications C ++ / CLI ne sont en général pas portables et incluent du code natif, elles ne peuvent donc fonctionner que sur Windows et sont inintéressantes pour le principal objectif de mono qui est de exécuter des programmes gérés sur Linux)

Notez que MS finira par abandonner C ++ / CLI. Ne investissez donc pas trop dessus et passez en C #.

Autres conseils

Mono a récemment réalisé d'importants progrès en matière d'interopérabilité C ++ dans CXXI ??.

De cette publication , la nouvelle est que la nouvelle technologie CXXI ??autorise C # /. Les développeurs NET à:

  • Consommez facilement les classes C ++ existantes à partir de C # ou de tout autre .NET langue
  • Instanciez les objets C ++ à partir de C #
  • Invoquer des méthodes C ++ dans les classes C ++ à partir de code C #
  • Appelez les méthodes en ligne C ++ à partir de code C # (à condition que votre bibliothèque soit compilée avec les fonctions -fkeep-inline-function ou que vous fournissiez un substitut bibliothèque)
  • Classes C ++ de sous-classes à partir de C #
  • Ignorer les méthodes C ++ avec les méthodes C #
  • Exposez les instances de classes C ++ ou de classes mixtes C ++ / C # au code C # et au C ++ comme si elles étaient du code natif.

CXXI ??est le résultat de deux travaux estivaux réalisés dans le cadre du programme Summer of Code de Google visant à améliorer l'interopérabilité de Mono avec le langage C ++.

Mono est capable d'exécuter des assemblages "purs" générés par C ++ / CLI, c'est-à-dire. ceux qui ne contiennent pas de code natif. Les différentes options / clr prises en charge par le compilateur C ++ sont documentées dans MSDN .

Il n’existe actuellement aucun support pour la compilation de C ++ / CLI. Il y a eu quelques travaux sur la modification de GCC pour qu'il émette IL, mais il n'est pas complet (et ne semble pas actif). Voir cet article .

Je ne pense pas que Microsoft documente le format pour l'inclusion de code natif dans un assemblage, il est donc difficile de prendre en charge ce problème.

C’est une très vieille question avec des réponses très intéressantes après quelques années.
À ce jour, tritao / CppSharp est le fork le plus développé de mono / cxxi qui a été déplacé en 2013 dans le référentiel mono et qui est en cours de développement actif depuis. Cet arbre peut être consulté à l'adresse mono / CppSharp

.

Leur fichier Lisez-moi est ici et les fonctionnalités du "générateur" sont les suivantes:

  • Plusieurs backends: C ++ / CLI et C # P / Invoke
  • Plusieurs ABI: Itanium, MS, ARM, iOS et iOS64
  • Plusieurs plates-formes: Windows, OS X et Linux
  • Prise en charge de la table virtuelle
  • Prise en charge de l'héritage multiple
  • Sémantique facilement extensible via les passes utilisateur
  • Prise en charge de travaux en cours pour STL (C ++ / CLI uniquement)
  • API de personnalisation et mappages de types fortement typés

Il contient également de nombreuses astuces AST et un analyseur.

Sur Mono 2.4, vous pouvez exécuter des applications C ++ / CLI compilées sous, par exemple. Visual Studio 2008 avec / clr: commutateur sécurisé.

Non, C ++ / CLI est non pris en charge sous Mono et ne le sera probablement jamais en cours de génération. L’IL pur utilisant des compilateurs MS permettrait à du code totalement géré de s’exécuter sous Mono.

En tant que langage d'interopérabilité, C ++ / CLI existe pour permettre d'appeler du code non managé. L’autre solution consiste à utiliser P / Invoke, qui est bien documentée , même si elle présente des problèmes.

allez ici et regardez sous "Langues manquantes". Mais le fait de ne pas compiler ne signifie pas que vous ne pouvez pas exécuter . Vous pouvez compiler votre code C ++ en utilisant le framework sdk et essayer de l'exécuter en mono. La peine d'essayer quand même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top