app中的Cocoa 32位和64位二进制文​​件

时间:2011-04-19 07:41:10

标签: objective-c cocoa macos unix

我的最新Mac App被Mac App Store拒绝了。

由于应用程序中包含自包含的unix可执行文件,它基本上不起作用。 我之前在我的应用程序中包含了一个二进制文件,该应用程序位于Mac App Store中,但是这个unix二进制文件给了我麻烦。

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

  

Mach-O 64位可执行文件x86_64

和32位二进制

  

Mach-O可执行文件i386

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

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

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

谢谢,约翰。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

GCC,因此XCode easilly支持构建32位通用或32/64位通用图像,因此您无需担心运行正确的图像。