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!