Mono .NET поддерживает и компилирует C++ / CLI?

Mono .NET поддерживает и компилирует C++ / CLI?

Если нет, знаете ли вы, есть ли у них планы поддержать его?

7 ответов

Решение

У нас нет компилятора для C++/CLI, это было бы очень большой задачей для очень маленькой пользовательской базы. Также учтите, что спецификация C++ / CLI изначально несовершенна и непереносима, поэтому возможность ее компиляции не сильно поможет в общем случае.

Вы можете скомпилировать с помощью компилятора MS .NET и запустить в моно с этими ограничениями:

  1. запускать с моно в любой системе, если приложение C++ / CLI чисто управляемое (но тогда зачем использовать такой уродливый язык, а не C#?)

  2. в других случаях запускать с моно на окнах (приложения C++/CLI, как правило, непереносимы и включают собственный код, поэтому они могут работать только на окнах и неинтересны для основной цели моно, которая заключается в запуске управляемых программ в Linux)

Обратите внимание, что сама MS в конечном итоге отбросит C++/CLI, поэтому не вкладывайте в нее слишком много средств и переключайтесь на C#.

Недавно Mono добилась значительных успехов в совместимости C++ в CXXI.

Из этой публикации рассказывается, что новая технология CXXI ​​позволяет разработчикам C#/.NET:

  • Легко использовать существующие классы C++ из C# или любого другого языка.NET
  • Создание объектов C++ из C#
  • Вызывать методы C++ в классах C++ из кода C#
  • Вызывать встроенные методы C++ из кода C# (при условии, что ваша библиотека скомпилирована с -fkeep-inline-functions или вы предоставили суррогатную библиотеку)
  • Подкласс C++ классы из C#
  • Переопределить методы C++ методами C#
  • Предоставляйте экземпляры классов C++ или смешанных классов C++/C# как для кода C#, так и для C++, как если бы они были нативным кодом.

CXXI является результатом двух лет работы Google Summer of Code над улучшением взаимодействия Mono с языком C++.

Mono может запускать "чистые" сборки, сгенерированные C++/CLI, т.е. те, которые не содержат никакого собственного кода. Различные параметры /clr, поддерживаемые компилятором C++, описаны в MSDN.

В настоящее время нет поддержки для компиляции C++/CLI. Была предпринята некоторая работа по модификации GCC для излучения IL, но она не завершена (и не отображается активной). Смотрите эту статью.

Я не верю, что Microsoft документирует формат для включения нативного кода в сборку, поэтому поддерживать это сложно.

Это очень старый вопрос с очень интересными ответами через несколько лет.
На данный момент https://github.com/tritao/CppSharp является наиболее активно разработанным форком mono / cxxi, который был перенесен обратно в моно- репозиторий в 2013 году и активно развивается, поскольку текущее дерево можно найти в mono / CppSharp.

Их readme здесь и функции для "генератора":

  • Несколько бэкэндов: C++/CLI и C# P/Invoke
  • Несколько ABI: Itanium, MS, ARM, iOS и iOS64
  • Несколько платформ: Windows, OS X и Linux
  • Поддержка переопределения виртуальных таблиц
  • Поддержка множественного наследования
  • Легко расширяемая семантика с помощью пользовательских пропусков
  • Незавершенная поддержка STL (только C++ / CLI)
  • Строго типизированные API настройки и карты типов

Это также идет с большим количеством классных вещей AST и парсером.

На Mono 2.4 вы можете запускать приложения C++/CLI, которые были скомпилированы, например, в Visual Studio 2008 с ключом /clr:safe.

Нет, C++/CLI не поддерживается в Mono и, вероятно, никогда не будет, хотя генерация чистого IL с использованием MS-компиляторов позволила бы полностью управляемому коду работать под Mono.

Как язык взаимодействия, C++/CLI существует, чтобы сделать возможным вызов неуправляемого кода. Другой альтернативой является использование P/Invoke, которое хорошо документировано, хотя и с проблемами.

Иди сюда и посмотри в разделе "Недостающие языки". Но то, что вы не можете скомпилировать, не означает, что вы не можете запустить. Вы можете скомпилировать свой код C++ с использованием фреймворка sdk и попробовать запустить его с помощью mono. В любом случае, стоит попробовать.

Другие вопросы по тегам