2012-11-19 11 views
5

System:Proste Hello World w Objective-C z brzękiem i GNUstep nie kompiluje

64bit Ubuntu Lucid 
GNUStep 
clang/LLVM 

test.m linii poleceń

#import <Foundation/Foundation.h> 

int main(int argc, char * argv[]){ 
    NSLog(@"Hello world!\n"); 
    return 0; 
} 

kompilacji:

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 

błąd:

/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) 

Podczas korzystania z GCC kompiluje się dobrze, ale klang nie.

Odpowiedz

10

na świeżym zainstalować Ubuntu 12.10 I zainstalowane następujące pakiety:

$ 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 

(ostateczna symlink jest wymagana do prawidłowego zlokalizowania objc.h nagłówek)

Potem skompilował test.m złożyć w następujący sposób:

$ 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 

[email protected]:~/Desktop$ ./test 
2012-11-20 11:02:08.184 test[11856] Hello world! 

* EDIT

na świeżym 10.04-64bit pozwala kompilować dobrze:

$ 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 
+0

-______________- teraz wyskakuje mi błąd mówiąc '/ usr/bin/ld: nie można odnaleźć -lobjc'. Zainstalowałem wszystkie wymienione elementy już ... – texasbruce

+0

Zaktualizowałem odpowiedź, zobacz moją edycję. –

+1

'/ usr/bin/ld: /tmp/test-2JGYua.o: niezdefiniowane odwołanie do symbolu '__objc_exec_class' /usr/bin/ld: note: '__objc_exec_class' jest zdefiniowany w DSO /usr/lib64/libobjc.so .2 więc spróbuj dodać go do linii poleceń linku /usr/lib64/libobjc.so.2: nie można odczytać symboli: Niepoprawna operacja klang: błąd: komenda linker zakończyła się niepowodzeniem z kodem zakończenia 1 (użyj opcji -v, aby wyświetlić wywołanie) ' – texasbruce