LLVM-GCC 4.2 Front End Binaries for Mingw32/x86
http://llvm.org/releases/download.html#2.9
KMC Staff Blog:Clang と LLVM を使ってみる。
http://blog.kmckk.com/archives/2435798.html
実は、よく分からんというのが本音ですが、mingw + gnustep の組み合わせだと objective-c の @property がコンパイルできません。
なので、先のリンクから↓の3つをダウンロードしてきて c:\llvm とかに移動
Clang Binaries for Mingw32/x86 (23M)(.sig)
LLVM Binaries for Mingw32/x86 (23M)(.sig)
LLVM-GCC 4.2 Front End Binaries for Mingw32/x86 (26M) (.sig)
別に入っている
GNUstep Windows Installer
http://www.gnustep.org/experience/Windows.html
の include を設定すると、@property がうまくコンパイルできます。かつ、うまく動きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #import <stdio.h> #import <Foundation/Foundation.h> #import <Foundation/NSObject.h> @interface Hello: NSObject { @private NSString *_msg ; } @property ( nonatomic ,retain) NSString *msg; @end @implementation Hello @synthesize msg = _msg ; - ( void )print { // NSLog( _msg ); printf( "%s\n" , [_msg cString]); } - ( void )dealloc { NSLog ( @"in dealloc" ); [ super dealloc]; } @end int main( int argc, char *argv[]) { puts( "hello obj-c world." ); Hello *hello = [[Hello alloc] init]; hello.msg = @"hello objc world." ; [hello print]; [hello release]; return 0; } |
こんな風に @property を使ったコードを書いておきます。
そして、最初は clang だけでコンパイルしてみると。
1 | clang -o main3 main3.m -I /llvm/include -I /GNUstep/GNUstep/System/Library/Headers -L c:/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString |
のようにコンパイルして実行すると、次のようにうまく動きます。
1 2 3 | C:\work\alice\objc>main3 hello obj-c world. 2011-07-05 18:12:32.113 main3[2400] in dealloc |
~~~
試しに vm 上で動かしてみようと
1 2 3 | clang -emit-llvm -S main3.m -I /llvm/include -I /GNUstep/GNUstep/System/Library/Headers llvm-as main3.s lli main3.s.bc |
な風にコンパイルしましたが、
1 2 3 4 5 6 7 | C:\work\alice\objc>lli main3.s.bc LLVM ERROR: Program used external function '__objc_exec_class' which could not b e resolved! Stack dump: 0. Program arguments: lli main3.s.bc 1. Running pass 'X86 Machine Code Emitter' on function '@.objc_load_functio n' |
な風に実行エラーになりますね。objc のランタイムを clang でコンパイルして配置するんでしょうが。
コンパイルして配置するんでしょうが。
35.65386552973979, 139.28319185822124
「コンパイルして配置するんでしょうが」…の続きは、objc のランタイム自体を clang でコンパイルして配置しないと、windows の llvm 環境では動かないのだろう、ってことです。
これで、llvm 上で動くとすれば、llvm 環境自体は os x 上でも動くので、そうなると os x で xcode を使ってビルドしている iphone の実行ファイルも windows 環境でビルド可能ではないか?ってことです。
まあ、iphone の実機にデプロイするには?という壁があるので、一筋縄ではいきそうもありませんが。