首页 文章

使用arm-apple-darwin10-llvm-gcc-4.2在MacOS上交叉编译问题

提问于
浏览
0

我正在从教科书中学习一个基本的"Hello World"示例,其目的是使用Xcode在MacOS上创建和交叉编译一个简单的命令行程序,然后在越狱的iPad上运行它 . 我在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

好 . 到现在为止还挺好 . 我应该可以将它复制到我的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的配置或设置有问题 . 或者我还没有喝足够的咖啡 . 但这是一本教科书的例子,所以我在设置中遗漏了一些东西 . 我也尝试使用平台,sdk和Sim目录设置iPhoneOS5.1.sdk,如iOS 5.1 with Xcode 4.2 and retina in iPad 3

任何指针都非常感激 .

2 回答

  • 2

    是 . 我可以回答我自己的问题...或者至少大部分问题 .

    首先,MacOS上的strings命令是一个红色的鲱鱼 . 我以为这告诉我二进制文件有问题 . 但我可以使用otools和nm . 所以,忽略字符串 . 除非有人想回答这个难题,否则我不会担心 . 它仍然很好奇 .

    所以从根本上说,ldid就是Patrick Toomey所解释的问题 . 简短的故事,ldid使用的codeign_allocate似乎不支持arm-apple交叉编译器正在添加的加载命令 .

    我的解决方案是使用钥匙串访问在MacOS上创建我自己的自签名证书,并使用/ usr / bin / codesign对其进行二进制签名 .

    详细信息:$ export CODESIGN_ALLOCATE = / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / codesign_allocate $ codesign -fs“certname”programname

    将其复制到iPad并运行它 .

  • 0

    不要创建自己的证书,请查看ldid:http://iphonedevwiki.net/index.php/Theos/Getting_Started

    只需在您的主机上运行 ldid -S binary (在从源代码构建它或下载Dropbox后),它将在越狱的iOS 5.1上运行 .

相关问题