Domanda

Mono .NET supporta e compila C ++ / CLI?

In caso contrario, sai se hanno piani per supportarlo?

È stato utile?

Soluzione

Non abbiamo un compilatore per C ++ / CLI, sarebbe un'impresa molto grande per una base di utenti molto piccola. Considera anche che le specifiche C ++ / CLI sono intrinsecamente imperfette e non portatili, quindi essere in grado di compilarle non sarebbe di grande aiuto nel caso generale.

Puoi compilare usando il compilatore MS .NET ed eseguire in mono con queste restrizioni:

  1. funziona con mono su qualsiasi sistema se l'app C ++ / CLI è gestita in modo puro (ma allora, perché usare un linguaggio così brutto e non C #?)

  2. funziona con mono su windows negli altri casi (le app C ++ / CLI sono generalmente non portatili e includono codice nativo, quindi possono funzionare solo su windows e non sono interessanti per il principale obiettivo di mono che è quello di eseguire programmi gestiti su Linux)

Nota che alla fine MS stesso lascerà cadere C ++ / CLI, quindi non investire troppo su di esso e passare a C #.

Altri suggerimenti

Di recente Mono ha fatto passi da gigante con l'interoperabilità C ++ in CXXI ??.

Da questo post , la storia breve è che la nuova tecnologia CXXI ??consente C # /. Sviluppatori NET a:

  • Utilizza facilmente le classi C ++ esistenti da C # o da qualsiasi altro .NET lingua
  • Crea un'istanza di oggetti C ++ da C #
  • Richiama i metodi C ++ nelle classi C ++ dal codice C #
  • Richiama i metodi inline C ++ dal codice C # (a condizione che la tua libreria sia compilata con funzioni -fkeep-inline o che tu fornisca un surrogato biblioteca)
  • Classificare le classi C ++ da C #
  • Sostituisci i metodi C ++ con i metodi C #
  • Esporre le istanze di classi C ++ o miste C ++ / C # sia su codice C # sia su C ++ come se fossero codice nativo.

CXXI ??è il risultato di due estati di lavoro dal Summer of Code di Google per migliorare l'interoperabilità di Mono con il linguaggio C ++.

Mono è in grado di eseguire assembly "puri" generati da C ++ / CLI, ad es. quelli che non contengono nessun codice nativo. Le varie opzioni / clr supportate dal compilatore C ++ sono documentate su MSDN .

Al momento non è supportato per la compilazione di C ++ / CLI. C'è stato del lavoro sulla modifica di GCC per emettere IL, ma non è completo (e non sembra attivo). Vedi questo articolo .

Non credo che Microsoft abbia documentato il formato per l'inclusione del codice nativo in un assembly, quindi supportare questo è difficile.

Questa è una domanda molto antica con risposte molto interessanti dopo alcuni anni.
Al momento tritao / CppSharp è il fork più attivamente sviluppato di mono / cxxi che è stato spostato nel repository mono nel 2013 ed è attualmente in fase di sviluppo dal l'albero è disponibile all'indirizzo mono / CppSharp

Il loro readme è qui e le funzionalità per il "generatore" sono:

  • Backend multipli: C ++ / CLI e C # P / Invoke
  • ABI multipli: Itanium, MS, ARM, iOS e iOS64
  • Piattaforme multiple: Windows, OS X e Linux
  • Supporto per l'override della tabella virtuale
  • Supporto per ereditarietà multipla
  • Semantica facilmente estendibile tramite pass utente
  • Supporto dei lavori in corso per STL (solo C ++ / CLI)
  • API di personalizzazione fortemente tipizzate e mappe dei tipi

Viene fornito anche con molte cose interessanti AST e un parser.

Su Mono 2.4 è possibile eseguire applicazioni C ++ / CLI compilate ad es. Visual Studio 2008 con / clr: switch sicuro.

No, C ++ / CLI è non supportato in Mono e probabilmente non lo sarà mai, sebbene generi puro IL che utilizza compilatori MS consentirebbe l'esecuzione di codice totalmente gestito in modalità Mono.

Come linguaggio di interoperabilità, esiste C ++ / CLI per consentire la chiamata di codice non gestito. L'altra alternativa è usare P / Invoke che è ben documentato sebbene con problemi.

vai qui e guarda sotto " Lingue mancanti " ;. Ma solo perché non puoi compilare non significa che non puoi eseguire . Puoi compilare il tuo codice C ++ usando framework sdk e provare a eseguirlo usando mono. Vale la pena provare comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top