Pull to refresh

Objective-C и Linux

Objective-C и Linux



Хотелось бы поделиться опытом разработки на Objective-C на linux.

Я использовал Archlinux, но и с другими дистрибутивами проблем быть не должно.

Все подробности смотрите под катом.


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

Необходимые программы


Первым делом, нам нужно установить компилятор GCC

На Archlinux это делается следующим образом:

pacman -S gcc
Вам могут понадобиться права root: sudo pacman -S gcc, в данном случае

После этого, необходимо установить Obkective-C фронтенд для GCC
pacman -S gcc-objc

Казалось бы, что все в порядке, приступим к написанию кода.

В качестве редактора я использую Gedit, в котором подсветка синтаксиса есть «из-коробки», так же я установил набор плагинов, в число которых входит встроенный терминал, сниппеты и прочие вкусности.

//main.m
int main( int argc, const char * argv[]){
return 0;
}


Попробуем скомпилировать:

gcc main.m -lobjc

На данном этапе все должно работать.

Первая проблема

Поигравшись некоторое время с кодом, я обнаружил, что библиотеки OpenStep отсутствуют

Для решения нужно написать в терминале следующее:
pacman -S gnustep

Pacman предложит вам выбрать из 4 пакетов, выбирайте все.

Проверим следующий код:

//main.m
#import <Foundation/Foundation.h>

int main( int argc, const char * argv[]){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, World");
[pool drain]
return 0;
}

Тут же компилятор выдает ошибку, NXConstantString ему не знаком. Так и должно быть, ведь мы не сказали компилятору о том, где нужно искать новые библиотеки.

Чтобы не писать их каждый раз, я предлагаю создать Makefile

//Makefile
CC = gcc
CFLAGS = -lobjc -std=c99 -I /usr/lib/GNUStep/System/Library/Headers \
-L /usr/lib/GNUStep/System/Library/Libraries -lgnustep-base \
-fconstant-string-class=NSConstantString
OBJECTS = main.o

main.exe : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) - o main.exe

main.o : main.m
$(CC) $(CFLAGS) -c main.m


Обратите внимание, что вместо четырех пробелов, нужно использовать один символ табуляции
Набираем в консоли: make
У меня этот код скомпилировался, но NSLog выдало некую ошибку, исправить которую можно следующим образом:

TZ='WS-U'
export TZ


Поздравляю, теперь вы можете смело писать программы на Objective-C!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.