Mono .NET поддерживает и компилирует C ++ / CLI? - PullRequest
30 голосов
/ 08 октября 2008

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

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

Ответы [ 7 ]

23 голосов
/ 11 октября 2008

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

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

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

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

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

17 голосов
/ 29 января 2012

В последнее время 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 ++.

9 голосов
/ 05 июля 2015

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

Их readme - здесь , а функции 'генератора':

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

Он также поставляется с множеством интересных AST-компонентов и парсером.

9 голосов
/ 08 октября 2008

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

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

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

2 голосов
/ 09 апреля 2009

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

1 голос
/ 26 января 2009

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

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

0 голосов
/ 08 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...