Simple Hello World in Objective-C with clang and gnustep does not compile
clang, objective-c
Solution
On a fresh install of Ubuntu 12.10 I installed the following packages:
$ sudo apt-get install build-essential
$ sudo apt-get install clang
$ sudo apt-get install gnustep
$ sudo apt-get install gnustep-make
$ sudo apt-get install gnustep-devel
$ sudo ln -s /usr/lib/gcc/i686-linux-gnu/4.7/include/objc /usr/local/include/objc
(the final symlink is required to properly locate the objc.h header)
Then I compiled the test.m file as follows:
$ clang -o test test.m -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \
-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \
-D_NATIVE_OBJC_EXCEPTIONS \
-lobjc
tux@ubuntu:~/Desktop$ ./test
2012-11-20 11:02:08.184 test[11856] Hello world!
* EDIT
On a fresh 10.04-64bit this allows to compile just fine:
$ sudo apt-get install build-essential
$ sudo apt-get install clang
$ sudo apt-get install gnustep-devel
$ sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/objc/ /usr/local/include/objc
Problem
System: ``` 64bit Ubuntu Lucid GNUStep clang/LLVM ``` test.m ``` #import <Foundation/Foundation.h> int main(int argc, char * argv[]){ NSLog(@"Hello world!\n"); return 0; } ``` compile command line: ``` clang -fobjc-gc -I /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include -I /usr/include/GNUstep/ -I /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include-fixed/ -L /usr/lib/GNUstep/ -L /usr/lib64/ -fconstant-string-class=NSConstantString -rpath /usr/lib64 -Xlinker -lgnustep-base test.m -o Test ``` error: ``` /usr/bin/ld: /usr/lib64//libgnustep-base.so: undefined reference to symbol '__objc_exec_class' /usr/bin/ld: note: '__objc_exec_class' is defined in DSO /usr/lib64/libobjc.so.2 so try adding it to the linker command line /usr/lib64/libobjc.so.2: could not read symbols: Invalid operation clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` While using GCC, it compiles fine, but clang does not.