woshidan's loose leaf

ぼんやり勉強しています

ObjectiveCのソースコードをclangでコンパイルした時Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_NSObject", referenced from: ... のようなメッセージが出てくる

症状

#import <Foundation/NSobject.h>
#import <stdio.h>

int main() {
  id obj = [[NSObject alloc] init];
...
}
$ clang -o ref1 ref1.m
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_NSObject", referenced from:
      objc-class-ref in ref1-62be76.o
  "_objc_msgSend", referenced from:
      _main in ref1-62be76.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因

Foundation/NSobject.hのヘッダファイルが含まれるFoundationフレームワークを読み込む指定がない。

$ clang -o ref1 ref1.m -framework Foundation

ならいける。