2009-05-18 14 views
0

次のプログラムのコンパイルに問題があります。私は "gcc -framework Foundation inherit8.1m"を使用していて、以下のエラーを受け取ります。私は間違って何をしていますか?ありがとう。Objective-Cプログラムのコンパイル

LD警告は "_main" から参照:crt1.10.5.oのLDに 開始:記号(S)が見つかりませんcollect2はinherit8.1mに、ファイルは、必要なアーキテクチャ未定義 シンボルではありません。 LD は

// Simple example to illustrate inheritance 


#import <Foundation/Foundation.h> 

// ClassA declaration and definition 

@interface ClassA: NSObject 
{ 
    int x; 
} 

-(void) initVar; 
@end 

@implementation ClassA 
-(void) initVar 
{ 
    x = 100; 
} 
@end 

// Class B declaration and definition 

@interface ClassB : ClassA 
-(void) printVar; 
@end 

@implementation ClassB 
-(void) printVar 
{ 
    NSLog (@"x = %i", x); 
} 
@end 

int main (int argc, char *argv[]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    ClassB *b = [[ClassB alloc] init]; 

    [b initVar];  // will use inherited method 
    [b printVar]; // reveal value of x; 

    [b release]; 

    [pool drain]; 
    return 0; 
} 
+0

は、あなたが質問がasweredされた方でもかかわらず、この質問を見たことは面白いです: 私はsource.mからコンパイルコマンドラインツールLogTestを持っています。私は現在コカンの本の同じ部分を読んでいます。素晴らしい本ですか? xcodeを使ってみませんか? –

+0

私はObjective-Cを学ぶのが急いで、Macシェルにアクセスできました。 (ただし、物理マシンへのアクセスはありません)XCodeははるかに便利です。 – Stu

答えて

4

1つの終了ステータスを返しただけ.Mで終わるものにソースファイルの名前を変更してください。ファイルの拡張子は.1mで、コンパイラを混乱させるようです。

+0

おっと、私はファイル名を "inherit8.1.m"としました。ありがとう。 – Stu

1

あなたの名前を変更しました。 inherit8.mではなくinherit8でなければなりません。 m。

1

私はLinuxでGNUmakefileを使う方が簡単だと分かりました。

> cat source.m 
#import <Foundation/Foundation.h> 

int main(void) 
{ 
    NSLog(@"Executing"); 
    return 0; 
} 

> cat GNUmakefile 
include $(GNUSTEP_MAKEFILES)/common.make 

TOOL_NAME = LogTest 
LogTest_OBJC_FILES = source.m 

include $(GNUSTEP_MAKEFILES)/tool.make 

> make 
Making all for tool LogTest... 
Compiling file source.m ... 
Linking tool LogTest ... 

> ./obj/LogTest 
2009-05-17 20:05:36.032 LogTest[9850] Executing 
関連する問題