Xcode を使用して MacOS で単純なコマンド ラインプログラムを作成してクロスコンパイルし、ジェイルブレイクされた iPad で実行することを目的とした教科書の基本的な「Hello World」の例に従っています。Xcode 4.2 インストールから MacOS 10.6.8 で arm-apple-darwin10-llvm-gcc-4.2 クロス コンパイラを使用します。サンプルコードは次のとおりです。
#include <stdio.h>
main ( ) {
printf("Hello, World!");
}
私が試みているコンパイルはこれです:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -o hello hello.c -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
これにより、file コマンドで検査するとオブジェクトが生成され、次のように表示されます。
$ file hello
hello: Mach-O executable arm
Ok。ここまでは順調ですね。これを iPad にコピーして、ldid を使用できるはずです。
ただし、失敗します:
MyiPad: /Applications root# ldid -S hello
codesign_allocate: object: hello malformed object (unknown load command 8)
util/ldid.cpp(582): _assert(78:WEXITSTATUS(status) == 0)
さらに、MacOS で文字列を実行すると、同じエラーが表示されます。
$ strings hello
strings: object: hello malformed object (unknown load command 8)
私の考えでは、Xcode の構成またはセットアップに問題があると思います。または、まだ十分なコーヒーを飲んでいません。しかし、これは教科書的な例であるため、セットアップに何かが欠けていることは明らかです。また、Xcode 4.2 と iPad 3 の Retina を使用した iOS 5.1に従って、プラットフォーム、sdk、および Sim ディレクトリを使用して iPhoneOS5.1.sdk をセットアップしようとしました。
どんなポインタでも大歓迎です。