読者です 読者をやめる 読者になる 読者になる

Blogging in A Dampish Dark Place

I am a consumer. As yet I have no name. I’ve no idea where I was born. All I remember is that I was blogging in a dampish dark place.

ARCがあるとclangでコンパイルできない。。

objective-c

結論から言うと、xcodeをバージョンアップしたときにclangがバージョンアップされなかったらしい。
ARCに対応していないから@autoreleasepoolからの構文を理解してくれなかったようだ。

使ったソースコード

#import <Foundation/Foundation.h>

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

    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

打ち込んだコンパイルコマンド

コンパイルしても@を受け付けてくれない訳ですよ。clangを使っているというのに、コンパイルに問題がある。

$ clang  -fobjc-arc -framework Foundation main.m 
main.m:6:5: error: unexpected '@' in program
    @autoreleasepool {
    ^
main.m:8:31: error: extraneous ')' before ';'
        NSLog(@"Hello, World!");
                              ^
main.m:8:15: warning: expression result unused [-Wunused-value]
        NSLog(@"Hello, World!");
              ^~~~~~~~~~~~~~~~
main.m:10:5: error: expected identifier or '('
    return 0;
    ^
main.m:11:1: error: expected external declaration
}
^
1 warning and 4 errors generated.

二つのclang

xcodeでコンパイルしたら問題なく動作するので、もしかして・・・と調べてみたら、案の定、xcode配下とPATH上で異なるclangが存在している模様。

それぞれのclangのバージョンを調べてみたら、、、Xcode配下の方は3.0なのに、普通のコマンドの方は2.1。

$ which clang
/usr/bin/clang
$ /usr/bin/clang --version
Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix 

$ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang --version
Apple clang version 3.0 (tags/Apple/clang-211.11) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix

xcode配下のclangを使ったら無事コンパイルができて期待の実行結果が得られたのでした。


clang のアップデート方法は宿題。しばらくはxcode上でコーディングすることに。

追記

Apple の Developer Center から Command Line Tools for Xcode なるものをダウンロードしてインストールしたら、clang がアップグレードされた。勢い余って3.0を超えて3.1にまで。

このclangを使ったらエラーなくコンパイル・実行が出来ました。

$ clang --version
Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix


試してはいないが、Xcodeのメニューから preferences -> downloads でも Command Line Tools for Xcode のインストールができる様子。

広告を非表示にする