2012-11-19 10 views
5

Sistema:semplice Ciao Mondo in Objective-C con clang e GNUstep non compila

64bit Ubuntu Lucid 
GNUStep 
clang/LLVM 

test.m riga di comando

#import <Foundation/Foundation.h> 

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

di compilazione:

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 

errore:

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

Mentre usa GCC, compila bene, ma clang no.

risposta

10

Su una nuova installazione di Ubuntu 12.10 ho installato i seguenti pacchetti:

$ 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 

(il link simbolico finale è necessaria per individuare correttamente l'intestazione objc.h)

Poi ho compilato il test.m file come segue:

$ 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

Su un 10.04-64bit fresca questo permette di compilare bene:

$ 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

-______________- ora mi dà un errore che dice '/ usr/bin/ld: non riesce a trovare -lobjc'. Ho già installato tutti gli articoli elencati ... – texasbruce

+0

Ho aggiornato la risposta, vedere la mia modifica. –

+1

'/ usr/bin/ld: /tmp/test-2JGYua.o: riferimento non definito al simbolo '__objc_exec_class' /usr/bin/ld: nota: '__objc_exec_class' è definito in DSO /usr/lib64/libobjc.so .2 quindi prova ad aggiungerlo alla riga di comando del linker /usr/lib64/libobjc.so.2: impossibile leggere i simboli: Operazione non valida clang: errore: comando linker fallito con codice di uscita 1 (usa -v per vedere l'invocazione) ' – texasbruce