Mono .NET supporta e compila C ++ / CLI?
Domanda
Mono .NET supporta e compila C ++ / CLI?
In caso contrario, sai se hanno piani per supportarlo?
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:
-
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 #?)
-
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.