仅 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 位框架吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 VS 中的 UINT64 上左移 (64 > shift > 32) 位仅移动 32 位
如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?