2013-02-17 10 views
5

So habe ich Ubuntu und clang3.0 installiert und ein einfaches program.m:Klirren Übersetzungsfehler (undefined Verweis auf objc_autoreleasepoolpush)

#include <Foundation/Foundation.h> 
int main() 
{ 
     @autoreleasepool{ 
      NSLog(@"Hi"); 
     } 

     return 0; 
} 

und ich versuche, es so zu kompilieren:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc 

und ich

undefined reference to objc_autoreleasePoolPush 
undefined reference to objc_autoreleasePoolPop 

so habe ich ein wenig gegoogelt und installieren objc2 und versucht:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc2 

aber nichts ändert sich. Vielleicht hat jemand das gleiche Problem gelöst?

Antwort

0

Mit libobjc2 auf meinem Ubuntu-System installiert ist, erstellt eine Kopie Ihrer first.m Dateien für mich mit dieser Zeile:

clang first.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \ 
-I /usr/include/GNUstep/ -lgnustep-base 

aber vielleicht ist es einfach ein Tippfehler am Ende des Befehlszeile?

Die -objc am Ende Ihres ersten Beispiels und die -objc2 am Ende der zweiten Anweisung weisen den clang-Compiler an, ausführbare Dateien mit den Namen bjc bzw. bjc2 zu erstellen. Meintest du -lobj? Ich denke, das Verknüpfen in der Obj-Bibliothek ist entscheidend, um eine Objective-C-Laufzeitbibliothek zu erhalten. Selbst mit dem libobjc2-Projekt heißt die erzeugte Bibliothek immer noch libobjc.so.x.y. Wenn Ihr Befehl kein -lobjc enthält, sehe ich nicht, wie es jemals richtig verlinken könnte. Ich könnte falsch liegen, aber es funktioniert nicht ohne mich.

+0

danke WeakPointer) clang first.m 'gnustep-config --objc-flags'' gnustep-config --objc-libs' -I/usr/include/GNUstep/-lgnustep-base -I/home/nazar/libobjc2/ das funktioniert gut, aber ich erhalte Warnung: Argument ungenutzt während der Kompilierung: '-shared-libgcc' nochmals vielen dank) – Nils

+0

und jetzt ich Warnung erhalten: libobjc.so.3, benötigt nach/usr/lib/libgnustep -base.so, kann Konflikte mit libobjc.so.4 verursachen – Nils

0

Ich bin nicht sicher, ob dies für GNUstep gilt, aber unter OS X müssen Sie das Compiler-Flag -fobjc-arc hinzufügen, wenn Sie mit ARC kompilieren möchten.

+0

Fehler: -fobjc-arc wird nicht unterstützt mit zerbrechlichen abi – Nils

+1

Nach http://wiki.gnustep.org/index.php/ObjC2_FAQ, müssen Sie die Option "-fobjc-nonfragile-abi" hinzufügen. –

+0

Ich werde versuchen http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux – Nils

0

Versuchen Sie, es mit GNUmakefile zu bauen?

Hier ist, wie man einen schreibt.

http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/node2.html

Man könnte zusammengestellt und wie

Klirren verknüpft werden first.m -c -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY = 1 -DGNU_GUI_LIBRARY = 1 -DGNU_RUNTIME = 1 -DGNUSTEP_BASE_LIBRARY = 1 -fobjc -runtime = gnustep-1.7 -fno-strict-aliasing -fecceptions -fobjc-ausnahmen -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi -D_NONFRAGILE_ABI -thread -fPIC -DDEBUG -fno-omit-frame-pointer -Wand -DGSWARN -DGSDIAGNOSE -Wno -import -g -fgnu-runtime -fconstant-zeichenklasse = NSConstantString -I. -I/usr/local/include -o obj/first.obj/first.mo

clang -rdynamisch -thread -shared-libgcc -experimente -fobjc-nonfragile-abi -fgnu-runtime -o obj/first. /obj/first.obj/first.mo -L/usr/local/lib -lgnustep-base -lobjc -lm

Je nachdem, wie Sie das GNUstep make-Paket konfigurieren.

+0

Huh? Was hat das Makefile mit dem Link-Problem des OP zu tun? – trojanfoe

+0

Es ist nicht nur ein Makefile, es ist ein Makefile, das konfigurierte Optionen enthält.GNUstep make package bietet normalerweise die Optionen, die zum Erstellen der GNUstep-Bibliotheken verwendet wurden, einschließlich Linkeroptionen. –