应用程序内的 Cocoa 32 位和 64 位二进制文件
我最新的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么不将 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.
你把事情搞得太复杂了。您不需要 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.