hello world中架构x86_64的未定义符号

时间:2013-11-20 05:21:28

标签: objective-c

今天我在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)

2 个答案:

答案 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

希望这有帮助!