Цель C для Windows


Что было бы лучшим способом написать Objective-C на платформе Windows?

Cygwin и gcc? Есть ли способ каким-то образом интегрировать это в Visual Studio?

вдоль этих строк-есть ли какие-либо предложения о том, как связать и использовать Windows SDK для чего-то подобного. Его другой зверь, но я знаю, что могу написать сборку и ссылку в DLL Windows, что дает мне доступ к этим вызовам, но я не знаю, как это сделать без поиска и получения по частям направления.

кто-нибудь знает о хорошем интернет-или книжном ресурсе, чтобы делать или объяснять такие вещи?

13 224

13 ответов:

расширяя два предыдущих ответа, если вы просто хотите Objective-C, но не какой-либо из фреймворков Cocoa, то gcc будет работать на любой платформе. Вы можете использовать его через Cygwin или получить MinGW. Однако, если вам нужны рамки Cocoa или, по крайней мере, разумное подмножество из них, то GNUStep и Cocotron-ваши лучшие ставки.

Cocotron реализует много вещей, которые GNUStep не делает, таких как CoreGraphics и CoreData, хотя я не могу ручаться за то, насколько полна их реализация на конкретной основе. Их цель состоит в том, чтобы держать Cocotron в курсе последней версии OS X, так что любая жизнеспособная программа OS X может работать на Windows. Поскольку GNUStep обычно использует последнюю версию gcc, они также добавляют поддержку Objective-C++ и многих функций Objective-C 2.0.

Я не тестировал эти функции с GNUStep, но если вы используете достаточно новую версию gcc, вы можете использовать их. Я не смог использовать Objective-C++ с GNUStep несколько лет тому назад. Однако GNUStep компилируется практически с любой платформы. Cocotron очень Mac-ориентированных проектов. Хотя, вероятно, его можно скомпилировать на других платформах, он поставляется с файлами проекта XCode, а не с файлами makefiles, поэтому вы можете скомпилировать его фреймворки только из коробки на OS X. Он также поставляется с инструкциями по компиляции приложений Windows на XCode, но не на любой другой платформе. В принципе, наверное, можно настроить среду разработки Windows для Cocotron, но это не так просто, как настройка одного для GNUStep, и вы будете сами по себе, так что GNUStep, безусловно, путь, если вы разрабатываете на Windows, а не только для Windows.

для чего это стоит, Cocotron лицензируется по лицензии MIT, а GNUStep лицензируется по лицензии LGPL.

вы можете используйте Objective C в среде Windows. Если вы выполните следующие действия, он должен работать просто отлично:

  1. посетить сайт GNUstep скачать GNUstep MSYS Subsystem (MSYS для GNUstep),GNUstep Core (библиотеки для GNUstep), и GNUstep Devel
  2. после загрузки этих файлов, установить в таком порядке, или у вас будут проблемы с конфигурацией
  3. перейти к C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 и убедиться, что
  4. Откройте командную строку и выполните команду gcc -v чтобы проверить, что GNUstep MSYS установлен правильно (если вы получаете файл не найден ошибка, убедитесь, что на GNUstep MSYS в своем PATH)
  5. используйте эту простую программу "Hello World" для тестирования функциональности GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
    
  6. вернитесь в командную строку и cd туда, где вы сохранили программу "Hello World", а затем скомпилировать это:2

    gcc -o helloworld.exe <HELLOWORLD>.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
    
  7. наконец, в командной строке введите helloworld запустить

всего наилучшего, и получайте удовольствие от Objective-C!


Примечания:

  1. я использовал путь установки по умолчанию-отрегулируйте свою командную строку соответственно
  2. убедитесь, что путь к вашей папке похож на мой, иначе вы получите сообщение об ошибке

также:

Cocotron-это проект с открытым исходным кодом, который направлен на реализацию кросс-платформенной цели-C API, аналогичной описанной Apple Inc.'документации с какао. Это включает в себя AppKit, Foundation, Objective-C runtime и API поддержки, такие как CoreGraphics и CoreFoundation.

http://www.cocotron.org/

WinObjC? Мост Windows для iOS (ранее известный как "Project Islandwood").

мост Windows для iOS (также называемый WinObjC)-это проект Microsoft с открытым исходным кодом, который предоставляет среду разработки Objective-C для Visual Studio/Windows. Кроме того, WinObjC обеспечивает поддержку совместимости API iOS. В то время как окончательный релиз произойдет позже этой осенью (что позволит мосту воспользоваться новыми возможностями инструментов, которые будут поставляться с предстоящим визуальным Studio 2015 Update),

мост теперь доступен сообществу с открытым исходным кодом в его текущем состоянии. Между этим моментом и падением. Моста iOS как проект с открытым исходным кодом под лицензией MIT. Учитывая амбициозность проекта, разработчики iOS могут легко создавать и запускать приложения на Windows.

Салман Ахмед имеет углубленный пост на мосту Windows для iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ обсуждение компилятора, среды выполнения, интеграции IDE и того, что такое мост и нет. лучше всего, исходный код для моста iOS находится в прямом эфире GitHub прямо сейчас.

мост iOS поддерживает как Windows 8.1, так и Windows 10 приложений, построенных для x86 и x64 процессорных архитектур, и в ближайшее время мы добавим оптимизацию компилятора и поддержку ARM, которая добавляет мобильный поддержка.

У меня смешанные чувства по поводу проекта Cocotron. Я рад, что они выпускают исходный код и обмен, но я не чувствую, что они делают вещи самым простым способом.

примеры.
Apple выпустила исходный код цель-c времени выполнения, которая включает в себя свойства и сбор мусора. Однако проект Cocotron имеет свою собственную реализацию объективных-c времени выполнения. Зачем дублировать усилия? Есть даже Visual Studio Файл проекта, который можно использовать для построения objc.DLL-файл. Или, если вы действительно ленивы, вы можете просто скопировать DLL файл из установки Safari для Windows.

Они также не потрудились использовать CoreFoundation, который также является открытым исходным кодом Apple. Я написал вопрос об этом, но не получил ответа.

Я думаю, что текущее лучшее решение-взять исходный код из нескольких источников (Apple, CocoTron, GnuStep) и объединить его вместе с тем, что тебе нужно. Вам придется прочитать много источников, но это будет стоить конечного результата.

Я знаю, что это очень старый пост, но я нашел решение, которое стало доступно только в последнее время и позволяет использовать почти все функции Objective-C 2.0 на платформе Windows.

С появлением gcc 4.6 в компилятор Objective-C была добавлена поддержка функций языка Objective-C 2.0 (блоки, точечный синтаксис, синтезированные свойства и т. д.) (см. Примечания для полной информации). Их среда выполнения также была обновлена, чтобы работать почти идентично Собственная цель Apple-c 2.0 runtime. Короче говоря, это означает, что (почти) любая программа, которая будет законно компилироваться с Clang на Mac, также будет компилироваться с gcc 4.6 без изменений.

в качестве дополнительной заметки одна функция, которая недоступна,-это литералы dictionary/array/etc, поскольку все они жестко закодированы в Clang для использования классов NSDictionary, NSArray, NSNumber и т. д. От Apple.

однако, если вы счастливы жить без обширных рамок Apple, вы можете. Как отмечается в другие ответы, GNUStep и Cocotron предоставляют модифицированные версии библиотек классов Apple, или вы можете написать свой собственный (мой предпочтительный вариант).

MinGW-это один из способов получить GCC 4.6 на платформе Windows, и его можно загрузить с сайт MinGW. Убедитесь, что при его установке вы включаете установку C, C++, Objective-C и Objective-C++. Хотя это необязательно, я бы также предложил установить среду MSYS.

после установки, цель-C 2.0 Источник может быть скомпилирован с:

gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)

MinGW также включает поддержку компиляции собственных графических приложений Windows с помощью -mwindows флаг. Например:

g++ -mwindows MyFile.cpp

Я еще не пробовал, но я думаю, что если вы обернете свои классы Objective-C в Objective-C++ на самом высоком возможном уровне, вы сможете успешно переплетать собственный графический интерфейс Windows C++ и Objective-C в одном приложении Windows.

проверить WinObjC:

https://github.com/Microsoft/WinObjC

Это официальный проект с открытым исходным кодом от Microsoft, который интегрируется с Visual Studio + Windows.

Если вы просто хотите поэкспериментировать, здесь есть компилятор Objective-C для .NET (Windows):qckapp

здесь вы можете получить компилятор objective c, который будет работать с Windows и хорошо работать с Visual Studio 2008\2010.

open-c flite

просто загрузите последний источник. Вам не нужно строить все CF-Lite есть решение под названием objc.ФСЛ. Вам нужно будет исправить несколько путей включения, но тогда он будет строить нормально. Есть даже тестовый проект включены так что вы можете увидеть некоторые работы .M файлы компилируются и работают в visual студия. Одна печальная вещь это работает только с Win32 не x64. Существует некоторый ассемблерный код, который должен быть написан для x64, чтобы он поддерживал это.

недавняя попытка перенести Objective C 2.0 В Windows-это субъективно.

из Readme:

Subjective-это попытка привести Objective C 2.0 с поддержкой ARC к Окна.

этот проект является вилкой objc4-532.2, цель c выполнения, что поставляется с OS X 10.8.5. Порт может быть скомпилирован на OS X с помощью llvm-лязг в сочетании с линкером MinGW.

есть определенные ограничения, многие из которых являются предметом дополнительных работа, в то время как другие, такие как исключения и блоки, зависят от большего серьезная работа в сторонних проектах. Ограничения следующие:

* 32-бит только-64-бит идет

• только статическое связывание-динамическое связывание продолжается

* никаких замыканий / блоков-пока libdispatch не поддерживает их в Windows

• никаких исключений-пока clang не поддерживает их на Windows

• не старый стиль GC-пока кто-то заботится...

• внутренности: нет vtables, нет поддержки gdb, просто malloc, нет предоптимизации-некоторые из этих вещей будут доступны в разделе 64-битной сборке.

• В настоящее время требуется исправленный компилятор clang; патч добавляет -fobjc-runtime=флаг subj

проект доступен на Github, а также thread о группе Cocotron, описывающей некоторые из Прогресса и вопросы, встречающиеся.

Получить GNUStep здесь

получить MINGW здесь

установить MINGW Установите Мгновенные Тогда Тест

Если вам удобно в среде Visual Studio,

Малый проект: jGRASP с gcc Большой проект: Cocotron

Я слышал, что есть эмуляторы, но я мог найти только эмулятор Apple IIhttp://virtualapple.org/. похоже, что он ограничен играми.

прежде всего, забудьте о GNUStep инструменты. Ни то, ни другое ProjectManager, ни ProjectCenter можно назвать IDE. При всем уважении, похоже ребята из GNUStep проект застрял в конце 80-х годов (когда NeXTSTEP впервые появился).

ВИМ

ctags цель поддержки-C с r771 (обязательно выберите предварительную версию 5.9 и добавьте --langmap=ObjectiveC:.m.h в командная строка, см. здесь), так что у вас будет приличное завершение кода/навигация по тегам.

на howto при добавлении поддержки Objective-C в плагин Vim tagbar.

Emacs

то же самое относится к etags поставляется с современным Emacsen, так что вы можете начать с Emacs Режим Objective C. YASnippet предоставит полезные шаблоны:

YASnippet objc-mode

и если вы хотите что-то более умное, чем основные теги на основе автозавершения кода, взгляните на это вопрос.

затмение

CDT поддерживает Makefileпроекты:

enter image description here

-- таким образом, технически вы можете построить свои проекты Objective-C из коробки (в Windows вам понадобится программа или MinGW toolchain). Единственная проблема-это код редактор, который будет сообщать много ошибок против того, что он считает чистым C код (проверка кода на лету может быть отключена, но все же...). Если вам нужна правильная подсветка синтаксиса, вы можете добавить Eclim на затмение и наслаждаться всеми хорошими функциями обоих затмение и ВИМ (см. выше).

еще один перспективный затмение плагин Colorer, но он не поддерживает Objective-C пока нет. Однако не стесняйтесь подавать запрос на функцию.

SlickEdit

SlickEdit, между другие особенности большой IDE,тутподдержка Objective-C. Хотя это довольно сложно узнать (не так сложно, как Emacs, хотя), я считаю, что это ваш лучший вариант при условии, что вы не против его покупки (цена вполне доступна).

кроме того, он имеет Eclipse-плагин который может быть использован в качестве альтернативы автономному редактору.

KDevelop

ходят слухи, что существует KDevelopпатч (15 лет, но кого это волнует?). Я лично так не думаю KDevelop функция-превосходит по сравнению с Emacsen, так что я бы не стал и пытаться.


вышесказанное также относится к разработке Objective-C на Linux, так как все упомянутые инструменты более или менее портативный.