gpt4 book ai didi

objective-c - objective c undefined symbol 编译错误

转载 作者:行者123 更新时间:2023-12-04 03:15:15 29 4
gpt4 key购买 nike

请帮忙!我在 objective-c 中的第一个程序。逐字逐句地遵循教程,但它给了我这个错误,我不知道如何阅读 objective-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

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

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;
}

编译器调用:

bash-3.2$ gcc CarApp.m SimpleCar.m -g -m64

错误:

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

最佳答案

在你的命令行上:

bash-3.2$ gcc CarApp.m SimpleCar.m -g -m64

您没有包括 Cocoa 和其他所需的框架。

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

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

-framework Cocoa

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

-isysroot /Developer/SDKs/MacOSX10.6.sdk

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

  1. 打开 Xcode 并创建一个新项目:文件 > 新建 > 新建项目;

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

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

    (4. 如果您选择命令行工具以外的项目类型,而不是将 CarApp.c 添加到项目中,您应该将 main() 函数的内容复制到 -awakeFromNib在您的 ApplicationDelegate 中找到的函数。)

关于objective-c - objective c undefined symbol 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231368/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com