2011-09-12 19 views
8
manuale

GCC dice:Per -lobjc o non per -lobjc?

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

E:

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

Tuttavia, posso con successo compilare un p rogramma con semplicemente:

$ cc prg.m -framework Foundation 

È un default del linker, quando si include un framework? In tal caso, dove è documentato ? Il programma è linkato in ogni caso:

$ 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

hai provato a compilarlo su sistemi Linux? potrebbe essere che os x lo faccia di default. – Eimantas

+0

Buona presa, non ho provato. Ma anche il manuale stesso viene modificato, con note "Solo Apple" in molti posti. Quindi mi chiedo (nel caso questo sia esclusivo per i sistemi Apple) perché non è esplicitamente documentato vicino a queste parti. – sidyll

+3

Sì, è un default del linker per i compilatori Apple. Non sono sempre aggiornati nelle loro pagine man. Si prega di presentare una segnalazione di bug. – Yuji

risposta

5

Questo perché il quadro Foundation è già collegato con libobjc.

Quindi su OSX, è necessario l'opzione -lobjc solo se non si collega al framework Foundation (che è molto raro).

+0

Typo, è -lobjc –