2009-09-23 22 views
5

cygwinでGCCを使って目的のCコードを正しく構築できますか?GCCとObjectiveCコードとCygwinのヘルプ

私はMac環境で動作するはずですが、gccで動作するための最も基本的なものを手に入れることはできません。私が持っている必要があるより多くの図書館がありますか?

#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 

エラー:

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 

答えて

-1

は、コマンドラインからではなく、メイクファイルを経由して直接gccのコマンドを実行してみましたがありますか? Objective-Cの

Objective-Cのコードをコンパイルhttp://www.cs.indiana.edu/classes/c304/ObjCompile.html

から直接採取

GNU CコンパイラGCCを使用してコンパイルすることができる。

は、この参照を発見しました。 List.hのように.hという拡張子でマークされたObjective-Cインタフェースファイル。実装ファイルは通常、List.mのように拡張子.mでマークされます。実装ファイルは、対応するインタフェースファイルを#importする必要があります。あなたのメインプログラムは、それが使用するすべてのクラスのインタフェースファイルを#importする必要があります。 通常、クラスを実装するファイルを別々にコンパイルしたいと思うでしょう。例えば、List.mをコンパイルするために、次のコマンドを使用します。

gcc -c -Wno-import List.m 

-cスイッチは、その後、あなたのプログラムにリンクすることができ、オブジェクトファイル、List.oを生成するようにコンパイラーに指示します。これは、各実装ファイルとメインプログラムで行います。

コードに#import文がある場合、-Wno-importスイッチは警告を出さないようにコンパイラに指示します。なんらかの理由で、Richard Stallman(GNUプロジェクトの創設者)は#importの構築が嫌いです。

プログラムをコンパイルする準備ができたら、gccを使ってクラスのすべての実装を再度リンクすることができます。たとえば、ファイルList.oをコンパイルし、次のコマンドを使用することができmain.oします

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

-o progが指定しない場合は(名前PROGの実行可能プログラムを作成するためのgccに指示します

Objective-Cとgccをリンクする場合、-lobjcスイッチを使用してObjective-Cライブラリを指定する必要があります。gccがエラーを報告する場合は、システム管理者に連絡してくださいgccのビルド時にObjective-Cライブラリとヘッダファイル(objc/Object.h)がインストールされていることを確認してください。

+0

gccのバージョンに注意してください。私はGCCバージョン4(cygwinは私の主要なgccバージョンとして3をインストールしました)を実行して、目的のCをコンパイルする必要がありました。 – Malaxeur

+0

私もそれをgoogled、それは私のMakefileにあるものです。 しかし、コードはまだコンパイルされません。 objective-cは真のobjective.cではないので、私は推測しています。 –

2

私はそれがObject Appleが開発したプライベートエクステンションであり、「標準」FSF GCCに貢献していないive-C 2.0。したがって、mingwコンパイラ(Appleのものではなく、FSFのもの)は、プロパティのような新しい構文を理解していません。

+3

Objective-Cの標準はありません。基本的にはGNUのバージョンとAppleのバージョン(そしておそらく他にもほとんど使われていないバージョン)があります。 GNUのバージョンは古くなってきています。ソースは "これはハックです"とコメントしています。 – dreamlax

2

@ Malaxeur - あなたは頭の上の釘を打つ。私はちょうどPC上のObjCについて酷評していました。その正確な問題がありました。私の道はv3.x gccコンパイラを指していました。私は4.xのバージョンに切り替えました。

「実装」が間違っていると誤解を招く場合は、「迷子@ @」エラーが表示されることにも注意してください。これは少し誤解を招くことです。

とにかく、ありがとうございました。

関連する問題