2009-09-23 17 views
5

Czy możliwe jest prawidłowe budowanie obiektywnego kodu c z GCC pod cygwin.Pomoc z GCC i kodem ObjectiveC oraz Cygwin

Mam następującą aplikację, która powinna działać w środowisku Macintosha, ale nie może uzyskać najbardziej podstawowych rzeczy do pracy z gcc. Czy jest więcej bibliotek, które muszę mieć.

#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 

Błąd:

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 

Odpowiedz

-1

Czy próbowałeś uruchamiając gcc polecenia bezpośrednio z linii poleceń, a nie poprzez makefile?

Znaleziono to odniesienie:

pobierane bezpośrednio z http://www.cs.indiana.edu/classes/c304/ObjCompile.html

Kompilacja Cel C

kod celu C mogą być sporządzane przy użyciu gcc GNU C. Pliki interfejsu programu Objective-C zwykle oznaczone rozszerzeniem .h jak w pliku List.h. Pliki implementacyjne są zwykle oznaczone rozszerzeniem .m jak na liście List.m. Plik implementacji powinien #importować odpowiedni plik interfejsu. Twój główny program powinien również #importować pliki interfejsu wszystkich klas, których używa. Zazwyczaj będziesz chciał skompilować pliki, które implementują twoje zajęcia osobno. Na przykład, aby skompilować List.m, należy użyć następującego polecenia:

gcc -c -Wno-import List.m 

przełącznik -c informuje kompilator, aby wyprodukować plik obiektowy, List.o, które mogą potem być połączony do swojego programu. Zrób to dla każdego pliku implementacji i programu głównego.

Przełącznik -Wno-import informuje kompilator, aby nie ostrzegał, jeśli w kodzie znajduje się instrukcja #import. Z jakiegoś powodu Richard Stallman (twórca Projektu GNU) nie lubi konstrukcji #import.

Gdy będziesz gotowy do kompilacji programu, możesz połączyć wszystkie implementacje swoich klas, ponownie używając gcc. Na przykład, aby skompilować pliki List.o i main.o można użyć następującego polecenia:

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

-o prog mówi gcc aby utworzyć wykonywalny programu pod nazwą prog (jeśli nie podasz to, domyślnie będzie to a.out.nie.nie.nie.nie.nie.nie.nie.nie.nieobowiązując Uwaga: podczas łączenia Objective-C z gcc, musisz określić bibliotekę Objective-C za pomocą przełącznika -lobjc. Jeśli gcc zgłasza błąd, skontaktuj się z administratorem systemu aby upewnić się, że biblioteka Objective-C i pliki nagłówkowe (objc/Object.h) zostały zainstalowane podczas budowy gcc.

+0

Chciałbym dodać, że powinieneś zwrócić uwagę na wersję gcc. Musiałem uruchomić gcc w wersji 4 (cygwin zainstalował 3 jako moją główną wersję gcc), aby uzyskać cel c do kompilacji. – Malaxeur

+0

I googled to również i to jest to, co jest w mojej Makefile. Ale kod nadal się nie kompiluje. Zgaduję, ponieważ celem c nie jest prawdziwy.c –

2

Myślę, że to dlatego, że używasz Object ive-C 2.0, które jest prywatnym rozszerzeniem opracowanym przez Apple i które nie wróciło do "standardowego" FSF GCC. W związku z tym Twój kompilator mingw (który nie jest oparty na Apple, ale na FSF) nie rozumie nowych właściwości takich jak składnia.

+3

Nie ma standardu dla Objective-C. Jest w zasadzie wersja GNU i wersja Apple'a (i być może kilka innych rzadko używanych). Wersja GNU staje się przestarzała, a źródło jest podziurawione komentarzem "to jest hack". – dreamlax

2

@ Malaxeur - uderzyłeś paznokciem w głowę. Właśnie walczyłem z ObjC na PC i miałem ten dokładny problem - moja ścieżka wskazywała na kompilator gcc v3.x. Przestawiłem się na wersję 4.x i voila!

Warto również zauważyć, że błąd "zabłąkany" @ "" pojawia się również, jeśli błędnie wprowadzono "implementację", co jest trochę mylące.

W każdym razie, dzięki za pomoc.