2013-02-17 10 views
5

Tak, mam Ubuntu i zainstalowane clang3.0 i prosty program.m:dzyń kompilacji błąd (niezdefiniowana odniesienia do objc_autoreleasepoolpush)

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

     return 0; 
} 

i próbuję skompilować to tak:

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

i dostaję

undefined reference to objc_autoreleasePoolPush 
undefined reference to objc_autoreleasePoolPop 

więc googled trochę i zainstalować objc2 i próbowałem:

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

ale nic się nie zmienia. Może ktoś miał ten sam problem rozwiązany?

Odpowiedz

0

Dzięki zainstalowanym na moim systemie Ubuntu libobjc2 kopia plików first.m kompiluje dla mnie z tej linii:

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

ale być może jest to po prostu literówka w końcu swoimi linii poleceń?

-objc na końcu pierwszego przykładu i -objc2 na końcu drugiego poleca kompilatorowi clang tworzenie plików wykonywalnych o nazwach odpowiednio bjc i bjc2. Czy miałeś na myśli -lobj? Myślę, że łączenie w bibliotece obj jest kluczowe dla uzyskania biblioteki środowiska wykonawczego Objective-C. Nawet w przypadku projektu libobjc2 wytworzona biblioteka nadal nosi nazwę libobjc.so.x.y. Jeśli twoja komenda nie zawiera -lobjc, nie widzę, jak mogłaby się poprawnie połączyć. Mogę się mylić, ale bez niego to nie działa.

+0

dzięki WeakPointer) clang first.m 'gnustep-config --objc-flags'' gnustep-config --objc-libs' -I/usr/include/GNUstep/-lgnustep-base -I/home/nazar/libobjc2/ to działa prawidłowo, ale pojawia się ostrzeżenie: argumentu niewykorzystane podczas kompilacji: '-shared-libgcc' dzięki jeszcze raz) – Nils

+0

i teraz otrzymuję ostrzeżenie: libobjc.so.3, potrzebnej/usr/lib/libgnustep -base.so może powodować konflikt z libobjc.so.4 – Nils

0

Nie jestem pewien, czy to dotyczy GNUstep, ale na OS X musisz dodać flagę kompilatora -fobjc-arc, jeśli chcesz skompilować z ARC.

+0

błąd: -fobjc-arc nie jest obsługiwany z kruchym abi – Nils

+1

Zgodnie z http://wiki.gnustep.org/index.php/ObjC2_FAQ, musisz dodać opcję '-fobjc-nonfragile-abi'. –

+0

Spróbuję http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux – Nils

0

Spróbuj zbudować z GNUmakefile?

Oto jak go napisać.

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

Jeden mogą być zebrane i połączone jak

szczęk first.m -c -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY = 1 -DGNU_GUI_LIBRARY -DGNU_RUNTIME = 1 = 1 = 1 -fobjc -DGNUSTEP_BASE_LIBRARY -runtime = gnustep-1.7 -fno-strict-aliasing -wyjątki -fobjc-wyjątki -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi -D_NONFRAGILE_ABI -pthread -fPIC -DDEBUG -fno-omit-frame-pointer -Wall -DGSWARN -DGSDIAGNOSE -Wno -import -g -fgnu-runtime -fconstant-string-class = NSConstantString -I. -I/usr/local/include -o obj/first.obj/first.mo

clang -rdynamic -pthread -shared-libgcc -fexceptions -fobjc-nonfragile-abi -fgnu-runtime -o obj/first. /obj/first.obj/first.mo -L/usr/local/lib -lgnustep-base -lobjc -lm

W zależności od sposobu konfiguracji pakietu GNUstep make.

+0

Huh? Co ma zrobić plik Makefile z kwestią łącznika OP? – trojanfoe

+0

To nie jest tylko plik Makefile, ale plik Makefile zawierający skonfigurowane opcje.Pakiet GNUstep make zwykle zawiera opcje, które zostały użyte do zbudowania bibliotek GNUstep, łącznie z opcjami linkera. –

Powiązane problemy