まだ、RubyCocoa のユニバーサルバイナリが i386 で動かない
ダメだった…。3度目の正直なるかっ!?
ええと、0.4.3d2 は大丈夫だったんだよな。じゃあそれの setup 時の出力と比較してみよう。
てきとうに省略。
(0.4.3d2) CompileC .o .m DynamicLibrary.LinkUsingFileList /Users/kimuraw/proj/rubycocoa/src/rubycocoa-0.4 .3d2/framework/build/Default/RubyCocoa.framework/Versions/A/RubyCocoa /Users/kim uraw/proj/rubycocoa/src/rubycocoa-0.4.3d2/framework/build/RubyCocoa.build/Defaul t/RubyCocoa.build/Objects-normal/LinkFileList /usr/bin/gcc-4.0 -o /Users/kimuraw/proj/rubycocoa/src/rubycocoa-0.4.3d2/fra mework/build/Default/RubyCocoa.framework/Versions/A/RubyCocoa "-L/Users/kimura w/proj/rubycocoa/src/rubycocoa-0.4.3d2/framework/build/Default" "-L/usr/lib" "- F/Users/kimuraw/proj/rubycocoa/src/rubycocoa-0.4.3d2/framework/build/Default" - filelist /Users/kimuraw/proj/rubycocoa/src/rubycocoa-0.4.3d2/framework/build/Rub yCocoa.build/Default/RubyCocoa.build/Objects-normal/LinkFileList "-framework" " Cocoa" "-lruby.1" "-arch" "ppc" "-dynamiclib" "-compatibility_version" "1" "-cu rrent_version" "1" "-undefined" "suppress" "-flat_namespace" "-arch" "ppc" "-arc h" "i386" "-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" -install_name "`ech o "@executable_path/../Frameworks/RubyCocoa.framework/Versions/A/RubyCocoa" | /u sr/bin/sed 's!//*!/!g'`"
(svn trunk) CompileC .o .m normal ppc objective-c com.apple.compilers.gcc.4_0 Ld /Users/kimuraw/proj/rubycocoa/src/framework/build/Default/RubyCocoa.framework /Versions/A/RubyCocoa normal ppc cd /Users/kimuraw/proj/rubycocoa/src/framework /usr/bin/gcc-4.0 -o /Users/kimuraw/proj/rubycocoa/src/framework/build/Defaul t/RubyCocoa.framework/Versions/A/RubyCocoa -L/Users/kimuraw/proj/rubycocoa/src/f ramework/build/Default -L/usr/lib -F/Users/kimuraw/proj/rubycocoa/src/framework/ build/Default -filelist /Users/kimuraw/proj/rubycocoa/src/framework/build/RubyCo coa.build/Default/RubyCocoa.build/Objects-normal/ppc/RubyCocoa.LinkFileList -fra mework Cocoa -arch ppc -Wl,-single_module -compatibility_version 1 -current_vers ion 1 -install_name @executable_path/../Frameworks/RubyCocoa.framework/Versions/ A/RubyCocoa -Wl,-Y,1455 -dynamiclib -undefined suppress -flat_namespace -arch pp c -arch i386 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -lxml2 /usr/lib/lib ruby.1.dylib
これらを比較してみると、
- CompileC では -arch ppc -arch i386 はついてる
- リンク(DynamicLibrary / Ld) でも、-arch ppc -arch i386 はついてる
これだけ見ると問題なさそうだよなあ。
でも後者のリンク対象で、Objects-normal/ppc とかあるのがヤバそうだよな。対応するような i386 がないし。これまでの手順は Makefile ベースの手順 と同じようにしていた。でも、Xcode ネイティブのプロジェクトにしてるときは、それじゃあマズかったりするんじゃないだろうか?
というわけで、Xcode ネイティブの手順に従ってやってみよう。ビルド設定は次の2つだ。
- ARCH = ppc i386
- SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk
これらを設定したかわりに、CFLAGS と LDFLAGS の -arch と -isysroot, -libsysroot は不要になるね。これの setup 時の出力は
(Xcode ネイティブに対応後) CompileC .o .m normal ppc objective-c com.apple.compilers.gcc.4_0 Ld .build/Objects-normal/ppc/RubyCocoa normal ppc CompileC .o .m normal i386 objective-c com.apple.compilers.gcc.4_0 Ld .build/Objects-normal/i386/RubyCocoa normal ppc CreateUniversalBinary RubyCocoa normal "ppc i386"
となる。ppc と i386 でそれぞれ RubyCocoa オブジェクトをビルドし、それを CreateUniversalBinary 時に lipo でファットバイナリにしている。
これでまたダメだと厳しいけど、ここまでくるともう「大丈夫」とは言えないよなあ。
どうでもいい知識が増えたような気がするけど、Xcode ではそれぞれのアーキテクチャ(このケースでは ppc と i386)でビルドフェーズを分けることによって、(BUILD_SETTING)_ppc といった形式のアーキテクチャごとの設定が利用できるようにしているんだろうな。gcc だけでも複数の -arch オプションを渡せば、一発で複数アーキテクチャのオブジェクトがコンパイル、リンクできるのだから。
| 固定リンク
最近のコメント