仅 32 位 MacOS 应用程序可以使用仅 64 位框架吗?

Posted

技术标签:

【中文标题】仅 32 位 MacOS 应用程序可以使用仅 64 位框架吗?【英文标题】:Can a 32bit only MacOS Application use 64bit-only Frameworks? 【发布时间】:2014-11-25 13:10:28 【问题描述】:

我们的 Mac 应用程序(很遗憾)只能在 32 位上构建和运行。原因是:一大堆非常古老的仅限 32 位的 C++ 代码与其他平台(Windows、android、Linux 等)共享。这是跨服务器-客户端网络-协议代码,因此无法真正替换。在每个人都需要 64 位之前,我们只能构建 32 位的应用程序。

现在我正在为这个应用程序构建一个新模块作为外部私有动态框架。我想使用 ARC 以及现代 Obj-C 运行时的新特性,但这些仅在 64 位版本中可用。

那么……我的 32 位 Mac 应用程序可以链接、使用和加载仅 64 位的框架吗?

【问题讨论】:

*** 不允许只回答两个字母。 【参考方案1】:

嗯,我找到了答案,总的来说是 --- NO

以下是详细信息和解决方法。

首先,32 位进程无法加载 64 位代码。当您尝试将 64 位框架链接到您的 32 位应用程序时,链接器会报错。

我被提供了两种解决方法,都依赖于将纯 32 位代码和纯 64 位代码分成 2 个不同的进程,使用 XPC 进行通信。

第一种方法是创建一个“宿主”64 位进程,它将加载我的 64 位框架,然后 32 位应用程序可以使用 XPC 与之对话。

第二个选项是提取所有 64 位不安全代码(我必须仅编译 32 位)并将其放入一个特殊的仅 32 位进程中,然后我可以在 Mac 上使我的应用程序仅 64 位,添加新框架,并通过 XPC 与 32 位辅助进程对话。

【讨论】:

以上是关于仅 32 位 MacOS 应用程序可以使用仅 64 位框架吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 仅针对 Intel 32-64bit 编译

在 VS 中的 UINT64 上左移 (64 > shift > 32) 位仅移动 32 位

如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?

仅 64 位应用程序中的 SQL 溢出异常

可以通过参数“-d32”强制 64 位 JVM 使用 32 位模式吗?

在 Java 应用程序中混合运行 32 位和 64 位本机库