objective c undefined symbol compilation error

And*_*rew 2 compiler-errors objective-c

请帮忙!我在目标c中的第一个项目.一个接一个地跟着一个教程,但它给了我这个错误,我不知道如何阅读目标c.

SimpleCar.h:

#import <Cocoa/Cocoa.h>


@interface SimpleCar : NSObject {
    NSString* make;
    NSString* model;
    NSNumber* vin;
}

// set methods
- (void) setVin:   (NSNumber*)newVin;
- (void) setMake:  (NSString*)newMake;
- (void) setModel: (NSString*)newModel;

// convenience method
- (void) setMake: (NSString*)newMake
        andModel: (NSString*)newModel;

// get methods
- (NSString*) make;
- (NSString*) model;
- (NSNumber*) vin;

@end
Run Code Online (Sandbox Code Playgroud)

SimpleCar.m:

#import "SimpleCar.h"


@implementation SimpleCar
// set methods
- (void) setVin: (NSNumber*)newVin {

    [vin release];
    vin = [[NSNumber alloc] init];
    vin = newVin;

}

- (void) setMake: (NSString*)newMake {

    [make release];
    make = [[NSString alloc] initWithString:newMake];

}

- (void) setModel: (NSString*)newModel {

    [model release];
    model = [[NSString alloc] initWithString:newModel];

}

// convenience method
- (void) setMake: (NSString*)newMake
        andModel: (NSString*)newModel {

    // Reuse our methods from earlier
    [self setMake:newMake];
    [self setModel:newModel];

}

- (NSString*) make {
    return make;
}

- (NSString*) model {
    return model;
}

- (NSNumber*) vin {
    return vin;
}

-(void) dealloc
{
    [vin release];
    [make release];
    [model release];
    [super dealloc];
}

@end
Run Code Online (Sandbox Code Playgroud)

CarApp.m:

#import <Foundation/Foundation.h>
#import "SimpleCar.h"

int main (int argc, const char * argv[]) {

  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    SimpleCar *myCar = [[SimpleCar alloc] init];

    NSNumber *newVin = [NSNumber numberWithInt:123];

    [myCar setVin:newVin];
    [myCar setMake:@"Honda" andModel:@"Civic"];

    NSLog(@"The car is: %@ %@", [myCar make], [myCar model]);
    NSLog(@"The vin is: %@", [myCar vin]);

    [myCar release];

  [pool drain];

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器调用:

bash-3.2$ gcc CarApp.m SimpleCar.m -g -m64
Run Code Online (Sandbox Code Playgroud)

错误:

Undefined symbols for architecture x86_64:
  "___CFConstantStringClassReference", referenced from:
      CFString in ccR0Zlgm.o
      CFString in ccR0Zlgm.o
      CFString in ccR0Zlgm.o
      CFString in ccR0Zlgm.o
  "_objc_msgSend", referenced from:
      _main in ccR0Zlgm.o
      -[SimpleCar setVin:] in ccJfVliU.o
      -[SimpleCar setMake:] in ccJfVliU.o
      -[SimpleCar setModel:] in ccJfVliU.o
      -[SimpleCar setMake:andModel:] in ccJfVliU.o
     (maybe you meant: l_objc_msgSend_fixup_release, l_objc_msgSend_fixup_alloc )
  "_NSLog", referenced from:
      _main in ccR0Zlgm.o
  "_objc_msgSend_fixup", referenced from:
      l_objc_msgSend_fixup_alloc in ccR0Zlgm.o
      l_objc_msgSend_fixup_release in ccR0Zlgm.o
      l_objc_msgSend_fixup_release in ccJfVliU.o
      l_objc_msgSend_fixup_alloc in ccJfVliU.o
     (maybe you meant: l_objc_msgSend_fixup_release, l_objc_msgSend_fixup_alloc )
  "_OBJC_CLASS_$_NSAutoreleasePool", referenced from:
      objc-class-ref in ccR0Zlgm.o
  "_OBJC_CLASS_$_NSNumber", referenced from:
      objc-class-ref in ccR0Zlgm.o
      objc-class-ref in ccJfVliU.o
  "_objc_msgSendSuper2", referenced from:
      -[SimpleCar dealloc] in ccJfVliU.o
  "_OBJC_METACLASS_$_NSObject", referenced from:
      _OBJC_METACLASS_$_SimpleCar in ccJfVliU.o
  "__objc_empty_cache", referenced from:
      _OBJC_METACLASS_$_SimpleCar in ccJfVliU.o
      _OBJC_CLASS_$_SimpleCar in ccJfVliU.o
  "__objc_empty_vtable", referenced from:
      _OBJC_METACLASS_$_SimpleCar in ccJfVliU.o
      _OBJC_CLASS_$_SimpleCar in ccJfVliU.o
  "_OBJC_CLASS_$_NSObject", referenced from:
      _OBJC_CLASS_$_SimpleCar in ccJfVliU.o
  "_OBJC_CLASS_$_NSString", referenced from:
      objc-class-ref in ccJfVliU.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

ser*_*gio 6

在您的命令行上:

bash-3.2$ gcc CarApp.m SimpleCar.m -g -m64
Run Code Online (Sandbox Code Playgroud)

你没有包括Cocoa和其他人所需的框架.

我的建议是使用Xcode构建应用程序,而不是命令行.

如果您需要并从命令行尝试,请使用-framework链接器开关添加您正在使用的所有框架,例如:

-framework Cocoa
Run Code Online (Sandbox Code Playgroud)

但是你还需要另一个开关,识别你正在构建的SDK(我想),例如:

-isysroot /Developer/SDKs/MacOSX10.6.sdk
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想要并尝试使用Xcode 4来构建您的项目,请按照下列步骤操作:

  1. 打开Xcode并创建一个新项目:File> New> New Project;

  2. 选择适合你的项目类型(命令行工具是合适的);

  3. 将SimpleCar.c/h和CarApp.c添加到您的项目中; 删除旧的main.c;

    (4.如果您选择其他命令行工具的项目类型,而不是将CarApp.c添加到项目中,则应将main()函数的内容复制到-awakeFromNibApplicationDelegate中的函数中.)