2009-09-23 14 views
5

E 'possibile creare codice c obiettivo correttamente con GCC sotto cygwin.Aiuto con codice GCC e ObjectiveC e Cygwin

Ho la seguente applicazione che dovrebbe funzionare su un ambiente Mac, ma non è possibile ottenere le cose più semplici per lavorare con gcc. Ci sono più librerie che ho bisogno di avere.

#import "HelloWorldApp.h" 

int main(int argc, char *argv[]) { 
    return 0; 
} // End of the // 

@interface Car 
{ 
    int test; 
} 

//The registration is a read-only field, set by copy 
@property int (readonly, copy) test; 

//the driver is a weak reference (no retain), and can be modified 
//@property Person* (assign) driver; 

@end 


CC=gcc 
CXX=gcc-g++ 
LD=$(CC) 

CFLAGS= 

LDFLAGS=-lobjc 

all: HelloWorld 

HelloWorld: HelloWorld.o 
    $(LD) $(LDFLAGS) -o [email protected] $^ 

%.o: %.m 
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected] 

clean: 
    rm -rvf *.o HelloWorld HelloWorld.exe 

Errore:

gcc -c HelloWorld.m -o HelloWorld.o 
In file included from HelloWorld.m:6: 
HelloWorldApp.h:19: error: stray '@' in program 
HelloWorldApp.h:19: error: parse error before "int" 
make: *** [HelloWorld.o] Error 1 

risposta

-1

Avete provato a fare funzionare i comandi gcc direttamente da linea di comando, piuttosto che tramite makefile?

Abbiamo trovato questo riferimento:

prese direttamente da http://www.cs.indiana.edu/classes/c304/ObjCompile.html

Compilazione Objective-C

codice Objective-C può essere compilato usando il compilatore gcc GNU C. File dell'interfaccia Objective-C solitamente contrassegnati dall'estensione .h come in List.h. I file di implementazione sono in genere contrassegnati dall'estensione .m di List.m. Il file di implementazione dovrebbe #importare il suo file di interfaccia corrispondente. Il tuo programma principale dovrebbe anche # importare i file di interfaccia di tutte le classi che usa. Di solito, vorrai compilare i file che implementano le tue classi separatamente. Per esempio, per compilare List.m, utilizzare il seguente comando:

gcc -c -Wno-import List.m 

L'opzione -c dice al compilatore di produrre un file oggetto, List.o, che possono poi essere inseriti nel programma. Fai questo per ciascuno dei tuoi file di implementazione e il tuo programma principale.

L'opzione -Wno-import indica al compilatore di non dare un avviso se si dispone di un'istruzione #import nel codice. Per qualche ragione, Richard Stallman (il fondatore del progetto GNU) non ama la costruzione #import.

Quando si è pronti per compilare il programma, è possibile collegare nuovamente tutte le implementazioni delle classi utilizzando nuovamente gcc. Ad esempio, per compilare il file List.o, e main.o è possibile utilizzare il seguente comando:

gcc -o prog -Wno-import List.o main.o -lobjc 

Il prog -o dice a gcc per creare un programma eseguibile con il nome prog (se non si specifica per impostazione predefinita a.out.

Si noti che quando si collega Objective-C con gcc, è necessario specificare la libreria Objective-C utilizzando l'opzione -lobjc. Se gcc segnala un errore, contattare l'amministratore di sistema per assicurarsi che la libreria Objective-C ei file di intestazione (objc/Object.h) siano stati installati quando gcc è stato creato.

+0

Vorrei aggiungere che si dovrebbe prestare attenzione alla versione di gcc. Ho dovuto eseguire gcc versione 4 (cygwin aveva installato 3 come mia versione gcc principale) per ottenere l'obiettivo c da compilare. – Malaxeur

+0

L'ho cercato su Google e questo è il mio Makefile. Tuttavia, il codice non viene ancora compilato. Sto indovinando perché l'obiettivo-c non è il vero obiettivo.c –

2

Penso che sia perché stai usando Object ive-C 2.0, che è un'estensione privata sviluppata da Apple e che non hanno contribuito allo "standard", GCC di FSF. Pertanto, il tuo compilatore mingw (che non è basato su Apple, ma su FSF) non comprende nuove proprietà di sintassi.

+3

Non esiste uno standard per Objective-C. C'è fondamentalmente la versione di GNU e la versione di Apple (e forse alcuni altri usati raramente). La versione di GNU sta diventando obsoleta e la fonte è piena di commenti "questo è un hack". – dreamlax

2

@ Malaxeur: hai colpito il chiodo proprio sulla testa. Ho appena avuto a che fare con ObjC su un PC e ho avuto questo problema esatto - il mio percorso stava puntando a un compilatore gcc v3.x. Sono passato alla versione 4.xe voilà!

Vale anche la pena notare che l'errore "stray '@" si apre anche se si scrive' implementazione 'errata, il che è un po' fuorviante.

In ogni caso, grazie per l'aiuto.