今天我在Guide
之后学习没有Xcode的Objective-C这是你好的世界:
makclass.m
#import "makclass.h"
#import <stdio.h>
@implementation MakClass
-(void) age {
printf("Age is %d", age);
}
-(void) setAge: (int) a {
age = a;
}
+(void) say {
printf("Haha");
}
@end
makclass.h
#import <Foundation/NSObject.h>
@interface MakClass: NSObject {
int age;
}
-(void) age;
-(void) setAge: (int) a;
+(void) say;
@end
helloworld.m
#import <stdio.h>
#import "makclass.h"
int main(void) {
printf("Hello World");
MakClass *makclass = [[MakClass alloc] init];
[makclass setAge: 1];
[makclass age];
[MakClass say];
[makclass release];
return 0;
}
clang helloworld.m
给我以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MakClass", referenced from:
objc-class-ref in helloworld-XEijke.o
"_objc_msgSend", referenced from:
_main in helloworld-XEijke.o
"_objc_msgSend_fixup", referenced from:
l_objc_msgSend_fixup_alloc in helloworld-XEijke.o
l_objc_msgSend_fixup_release in helloworld-XEijke.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
答案 0 :(得分:3)
您需要确保传入框架和所有文件:
clang -framework Foundation -o helloworld helloworld.m makclass.m
答案 1 :(得分:2)
欢迎来到Objective-C!
编译时,需要指定helloworld.m
所需的所有实现文件。仅仅因为包含头文件并不意味着也将包含实现文件。
此外,由于这是Objective-C,因此请确保您还包含-lObjC
标志以包含Objective-C库。
因此,您应该运行的命令看起来像clang -lObjC helloworld.m makclass.m
。
clang
然后会吐出一个名为a.out
的程序,您可以运行该程序。如果您要将名称从a.out
更改为helloworld
,则可以使用-o
标记指定该名称。例如:
clang -lObjc -o helloworld helloworld.m makclass.m
希望这有帮助!