2011-09-12 5 views
8

GCC instrukcja mówi:Do -lobjc lub nie do -lobjc?

file.m
        Objective-C source code. Note that you must link with thelibobjc
        library yo make an Objective-C program work.

oraz:

-lobjc
        You need this special case of the-loption in order to link an
        Objective-C or Objective-C++ program.

Jednakże, można z powodzeniem sporządzenie str rogram z prostym:

$ cc prg.m -framework Foundation 

Czy to jest linker domyślny, gdy dołączasz framework? Jeśli tak, to gdzie jest to udokumentowane? Program pobiera związany i tak:

$ otool -L a.out 
a.out: 
     /System/Library/Frameworks/Foundation.framework/.../Foundation (...) 
     /usr/lib/libSystem.B.dylib (...) 
    --> /usr/lib/libobjc.A.dylib (...) 
     /System/Library/Frameworks/CoreFoundation.f...k/.../CoreFoundation (...) 
+0

Czy próbowałeś skompilować to na systemach Linux? może być tak, że os x robi to domyślnie. – Eimantas

+0

Dobry połów, nie próbowałem. Ale nawet sam podręcznik jest modyfikowany, z notatkami "Apple Only" w wielu miejscach. Zastanawiam się (w przypadku, gdy dotyczy to wyłącznie systemów Apple), dlaczego nie jest to wyraźnie udokumentowane w pobliżu tych części. – sidyll

+3

Tak, jest to domyślny linker dla kompilatorów Apple. Nie zawsze są aktualne na swoich stronach man. Proszę złożyć raport o błędzie. – Yuji

Odpowiedz

5

To dlatego, że ramy Foundation jest już połączone z libobjc.

Tak więc na OSX, potrzebujesz opcji -lobjc tylko wtedy, gdy nie łączysz się ze strukturą Foundation (co jest bardzo rzadkie).

+0

Typo, to -lobjc –

Powiązane problemy