Цель C для Windows - PullRequest
       101

Цель C для Windows

225 голосов
/ 11 сентября 2008

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

Cygwin и gcc? Можно ли как-то интегрировать это в Visual Studio?

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

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

Ответы [ 13 ]

146 голосов
/ 26 сентября 2008

Расширяя два предыдущих ответа, если вы просто хотите Objective-C, но не какую-либо из платформ Cocoa, то gcc будет работать на любой платформе. Вы можете использовать его через Cygwin или получить MinGW. Однако, если вам нужны платформы Какао или хотя бы их разумное подмножество, тогда 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, а не с make-файлами, поэтому вы можете компилировать его фреймворки только из коробки на OS X. Он также поставляется с инструкциями по компиляции приложений Windows на XCode, но не любая другая платформа. В принципе, возможно, можно настроить среду разработки Windows для Cocotron, но это не так просто, как настроить среду для GNUStep, и вы будете сами по себе, поэтому GNUStep определенно является подходящим вариантом, если вы разрабатываете на Windows в отличие от Windows.

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

89 голосов
/ 24 марта 2012

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

  1. Посетите веб-сайт GNUstep и загрузите GNUstep MSYS Subsystem (MSYS для GNUstep), GNUstep Core (Библиотеки для GNUstep) и GNUstep Devel
  2. После загрузки этих файлов установите в таком порядке, иначе у вас будут проблемы с настройкой
  3. Перейдите к C:\GNUstep\GNUstep\System\Library\Headers\Foundation 1 и убедитесь, что Foundation.h существует
  4. Откройте командную строку и запустите gcc -v, чтобы убедиться, что GNUstep MSYS правильно установлен (если вы получаете сообщение об ошибке «файл не найден», убедитесь, что папка bin 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. Убедитесь, что путь к вашей папке аналогичен моему, в противном случае вы получите ошибку
13 голосов
/ 11 августа 2015

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

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

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

У Салмаана Ахмеда есть подробное сообщение о Windows Bridge для 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, которая добавляет мобильную поддержку.

13 голосов
/ 11 сентября 2008

Также:

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

http://www.cocotron.org/

9 голосов
/ 05 ноября 2009

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

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

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

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

8 голосов
/ 12 октября 2012

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

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

В качестве дополнительного примечания, одной из функций, которая недоступна, являются литералы словаря / массива / и т. Д., Поскольку все они жестко запрограммированы в Clang для использования классов Apple NSDictionary, NSArray, NSNumber и т. Д.

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

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

После установки источник Objective-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 GUI C ++ и Objective-C - все в одном Приложение для Windows.

7 голосов
/ 03 ноября 2015

Оформить WinObjC :

https://github.com/Microsoft/WinObjC

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

6 голосов
/ 21 июля 2010

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

5 голосов
/ 28 августа 2011

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

открытый флайт

Просто скачайте последний источник. Вам не нужно собирать все CF-Lite, есть решение под названием objc.sln. Вам нужно будет исправить некоторые из включенных путей, но тогда все будет хорошо. В него даже включен тестовый проект, так что вы можете увидеть, как некоторые файлы-target. C компилируются и работают в visual studio. Одна печальная вещь - это работает только с Win32, а не с x64. Для поддержки x64 необходимо написать код на ассемблере.

4 голосов
/ 01 июня 2014

Недавняя попытка перенести Objective C 2.0 на Windows - это проект Subjective .

Из файла Readme:

Субъективным является попытка довести Objective C 2.0 с поддержкой ARC до Окна.

Этот проект является форком objc4-532.2, среды выполнения Objective C, которая поставляется с OS X 10.8.5. Порт может быть скомпилирован на OS X с помощью llvm-clang в сочетании с компоновщиком MinGW.

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

• Только 32-разрядная версия - выполняется 64-разрядная

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

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

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

• Нет GC старого стиля - пока кому-то все равно ...

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

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

Проект доступен на Github , и в Cocotron Group также есть нить , описывающая некоторые успехи и возникшие проблемы.

...