clang

2013-02-17 21 views
5

Yani, Ubuntu var ve clang3.0 yüklenmiş ve basit program.m:clang

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

     return 0; 
} 

ve ben böyle derlemeye deneyin:

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

ve ben

undefined reference to objc_autoreleasePoolPush 
undefined reference to objc_autoreleasePoolPop 

olsun yüzden biraz googled ve objc2 yükleyip denedim:

ancak hiçbir şey değişmez. Belki birileri aynı problem çözmüştü?

cevap

0

, senin first.m dosyaların bir kopyası bu çizgiyle benim için derler:

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

ama belki sadece bir yazım hatası komut satırlarının sonunda mı?

İlk örneğinizin sonundaki -objc ve saniyenin sonunda -objc2, clang derleyicisine sırasıyla bjc ve bjc2 adlarıyla yürütülebilir dosyalar oluşturmasını bildirir. -lobj demek istedin mi? Ben obj kütüphanesinde bağlantı kurmak bir Objective-C çalışma zamanı kitaplığı almak için kritik olduğunu düşünüyorum. Libobjc2 projesiyle bile, üretilen kitaplık hala libobjc.so.x.y olarak adlandırılmıştır. Komutunuz bir -lobjc içermiyorsa, nasıl doğru bir şekilde bağlanabileceğini göremiyorum. Yanlış olabilirdim ama o olmadan benim için işe yaramıyor.

+0

teşekkürler WeakPointer) clang first.m 'gnustep-config --objc-flag'leri gnustep-config --objc-libs' -I/usr/include/GNUstep/-lgnustep-base -I/home/nazar/libobjc2/ bu çalışıyor ama uyarıyı alıyorum: kullanılmayan argüman derleme sırasında:/usr/lib/libgnustep ihtiyaç duyduğu libobjc.so.3,: '-shared-libgcc' tekrar teşekkürler) – Nils

+0

ve şimdi uyarı olsun -base.so, libobjc.so.4 ile çakışabilir – Nils

0

Bunun GNUstep için geçerli olup olmadığından emin değilim, ancak OS X'te, ARC ile derlemek isterseniz -fobjc-arc derleyici bayrağını eklemeniz gerekir.

+0

hata: -fobjc-arc, fransızca abi ile desteklenmiyor – Nils

+1

http://wiki.gnustep.org/index.php/ObjC2_FAQ adresine göre, '-fobjc-nonfragile-abi' seçeneğini eklemeniz gerekir. –

+0

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

0

GNUmakefile ile oluşturmaya çalışın?

Bir tane nasıl yazılır.

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

bir derlenmiş ve

çınlama first.m -c -MMD -mp -DGNUSTEP -DGNUSTEP_BASE_LIBRARY = 1 -DGNU_GUI_LIBRARY = 1 -DGNU_RUNTIME = 1 -DGNUSTEP_BASE_LIBRARY = 1 -fobjc gibi bağlantılı olabilir -runtime = gnustep-1.7 -fno-katı-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi -D_NONFRAGILE_ABI -pthread -fPIC -DDEBUG -fno-ihmal-çerçeve-işaretçi -Wall -DGSWARN -DGSDIAGNOSE -Wno -import -g -fgnu-runtime -fconstant-string-class = NSConstantString -I. -I/usr/local/include -o obj/first.obj/first.mo

clang -dynamic -pread -shared-libgcc -fexceptions -fobjc-nonfragile-abi -fgnu-çalışma zamanı -o obj/first. /obj/first.obj/first.mo -L/usr/local/lib -lgnustep-base -lobjc -lm

GNUstep make paketini nasıl yapılandırdığınıza bağlı olarak. Benim Ubuntu sistemde yüklü libobjc2 ile

+0

Huh? Makefile OP'nin bağlayıcı sorunuyla ne ilgisi var? – trojanfoe

+0

Sadece makefile değil, yapılandırılmış seçenekler içeren bir makefile.GNUstep make paketi genellikle, linker seçenekleri de dahil olmak üzere GNUstep kütüphaneleri oluşturmak için kullanılan seçenekleri sağlar. –