Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Недавно Mono сделал некоторые довольно большие шаги с совместимостью на С++ в CXXI.

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

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

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

Ответ 3

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

В настоящее время нет поддержки для компиляции С++/CLI. Проделана определенная работа по модификации GCC для испускания ИЛ, но она не является полной (и не появляется активной). См. Статью .

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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