应用程序内的 Cocoa 32 位和 64 位二进制文​​件

发布于 2024-11-02 08:32:29 字数 624 浏览 0 评论 0原文

我最新的 Mac 应用程序被 Mac App Store 拒绝。

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

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

Mach-O 64 位可执行文件 x86_64

和 32 位二进制文​​件

Mach-O 可执行 i386

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

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

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

谢谢,约翰。

My latest Mac App got rejected from the Mac App Store.

Basically it didn't work due to a self contained unix executable contained within the app.
I have included a binary within my app before, that app is in the Mac App Store but this unix binary is giving me troubles.

I have compiled 2 different versions of this binary on a i386 machine and the other on x86_64 machine.
Using "file appname", I get for the 64 bit binary

Mach-O 64-bit executable x86_64

and the 32 bit binary

Mach-O executable i386

At runtime I try to execute the correct binary but I noticed doesn't seem to matter? Which binary I use, I can execute the x86_64 on and i386 machine and things work fine.

My application build settings are what comes with the default project (standard 32/64 bit intel).

The question is should I attempt to run the 32 bit binary when I the app is running on an i386 machine?
And why does my x86_64 binary work when I run this on a i386 machine?

Thanks, John.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长安忆 2024-11-09 08:32:29

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

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

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

Why are you not building your Unix tool as a universal binary? Then the operating system will pick the correct version of the binary to run based on the machine's architecture.

EDIT - to add my comment as part of the proper answer.

You need to build the i386 and x86_64 binaries. Obviously, you need to build the exe and all the dependencies for both architectures. It may be enough to use the gcc flag -arch=i386 everywhere for the i386 architecture. Then you can use lipo to combine the two binaries.

我也只是我 2024-11-09 08:32:29

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

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

You are making things too complicated. You do not need a 64bit machine to build the 64bit binary, nor is it a problem to build the 32bit binary on the 64bit machine.

GCC and thus XCode easilly supports building of either 32bit universal, or 32/64bit Universal images so you don't have to worry at all about running the correct one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文