2011-04-19 50 views
1

我最新的Mac应用程序从Mac App Store中被拒绝。可可32位和64位二进制文​​件内应用程序

基本上它没有工作,因为应用程序中包含一个自包含的unix可执行文件。 我之前在应用程序中包含了一个二进制文件,该应用程序位于Mac App Store中,但这个unix二进制文件给我带来麻烦。

我已经在i386机器上编译了这个二进制文件的2个不同版本,而在x86_64机器上编译了这个二进制文件。 使用 “文件APPNAME”,我得到了64位二进制

Mach-O的64位可执行文件x86_64的

和32位二进制

的Mach-O可执行i386的

在运行时,我尝试执行正确的二进制文件,但我注意到似乎并不重要?我使用哪个二进制文件,我可以在i386机器上执行x86_64,并且工作正常。

我的应用程序构建设置是默认项目(标准32/64位英特尔)随附的内容。

问题是我应该试图运行32位二进制文​​件,当我的应用程序在i386机器上运行?
为什么我的x86_64二进制文件在i386机器上运行时工作?

谢谢,约翰。

+1

你怎么知道'i386机器'只是i386?另外,为什么不是通用构建? – 2011-04-19 07:45:04

+0

我使用“uname -a”检查了i386机器,它说i386,但我不知道它可以运行其他架构? – 2011-04-19 07:50:06

+1

IIRC uname可以告诉内核体系结构,而支持64位的机器可以启动32位内核,但在一些可支持64位的Core 2 Duo机器中这是必需的,但EFI却不支持。运行'sysctl hw.cpu64bit_capable' - 如果机器具有64位功能,则显示1,否则显示0。 – 2011-04-19 07:53:24

回答

4

为什么不将Unix工具构建为通用二进制文件?然后操作系统将根据机器的体系结构选择正确版本的二进制文件。

编辑 - 添加我的评论作为正确答案的一部分。

您需要构建i386和x86_64二进制文件。显然,你需要为这两种体系结构构建exe和所有的依赖关系。对于i386体系结构,在任何地方都可以使用gcc flag -arch = i386。然后你可以使用lipo来组合这两个二进制文件。

+0

我想简单的答案是,我不是100%确定如何。该工具是httrack,我很难得到正确的依赖关系。我使用这个命令[./configure --prefix =/opt/local --with-zlib =/opt/local --enable-shared = no]我需要的大事是二进制文件不依赖其他库,所以它会完全独立运行。我如何编译i386和x86_64? – 2011-04-19 07:46:19

+2

阅读'man lipo'来查看如何链接通用二进制文件。 – user57368 2011-04-19 07:56:41

+1

您需要构建i386和x86_64二进制文件。显然,你需要为这两种体系结构构建exe和所有的依赖关系。对于i386体系结构,在任何地方都可以使用gcc标志“-arch = i386”。然后你可以使用lipo来组合这两个二进制文件。 – JeremyP 2011-04-19 08:07:07

2

你让事情太复杂了。您不需要64位机器来构建64位二进制文​​件,在64位机器上构建32位二进制文​​件也不是问题。

GCC和XCode easilly支持32位通用或32位/ 64位通用映像的构建,因此您不必担心运行正确的映像。

+0

XCode正在为我创建通用应用程序,工作正常。我已经在我的应用程序中包含了一个unix-binary,我已经从命令行编译过。我有这个应用程序的x86_64和i386版本,但出于某种原因,我有问题让这个二进制文件在不同的体系结构上正常工作。现在已经使用lipo来结合他们,谢谢你的帮助。 – 2011-04-19 08:11:46

相关问题