Я изучаю язык Objective-C. Поскольку у меня нет Mac, я компилирую и запускаю свой код на платформе Ubuntu 11.04.
До сих пор я использовал gcc для компиляции. Я установил GNUStep, и все работает. Но потом я начал использовать некоторые функции Objective-C 2.0, такие как @property и @synthesize, которые gcc не разрешает.
Итак, я попытался скомпилировать код с Clang, но кажется, что он неправильно связывает мой код с библиотеками GNUStep, даже с простой программой Hello world.
Например, если я скомпилирую следующий код:
#import <Foundation/Foundation.h>
int main(void) {
NSLog(@"Hello world!");
return 0;
}
Вывод компилятора:
/tmp/cc-dHZIp1.o: In function `main':
test.m:(.text+0x1f): undefined reference to `NSLog'
/tmp/cc-dHZIp1.o: In function `.objc_load_function':
test.m:(.text+0x3c): undefined reference to `__objc_exec_class'
collect2: ld returned 1 exit status
clang: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
Команда, которую я использую для компиляции,
clang -I /usr/include/GNUstep/ test.m -o test
с директивой -I включить библиотеки GNUStep (иначе Clang не сможет найти Foundation.h).
Я искал свою проблему и посещал как веб-страницы GNUStep, так и Clang, но я не нашел для нее решения. Поэтому любая помощь будет оценена.
Спасибо!