问题标签 [universal-binary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
103014 浏览

iphone - 如何确定 Mac OS X 上静态库 (.a) 的目标架构?

我有兴趣验证是否为 ARM 或 Intel 构建了给定的 iPhone 静态库。

好奇心胜过一切。是否有某种 Mac OS X 或 BSD 特定工具来执行此操作?这篇文章给出了一个 Linux 的例子。

0 投票
4 回答
3399 浏览

xcode - 从两个应用程序创建“通用二进制”?

简短的问题:您如何获取两个应用程序,一个用于英特尔,另一个用于 ppc,并将它们打包成一个通用二进制文件?

我目前对这个问题的想法:

我已经阅读了有关通用二进制文件的苹果开发人员文档,但无法找到答案,因此可能不可能。

由于我不会进入这里的原因,我的程序有两个应用程序(相对于使用 xtools 来普遍编译二进制文件一次),一个用于 Intel Mac,另一个用于在 PPC 上运行的 Mac >=10.3.9。共享资源不是问题。

我可以将 MyProg_intel.app 和 MyProg_ppc.app 放入一个 zip 并以这种方式分发;但这可能会导致我将向其分发程序的许多人感到困惑。

0 投票
1 回答
336 浏览

java - 使用 Java 加载通用二进制文件

我有一个通过 JNI 加载本机代码的 Java 小程序。一切都很好,直到我升级到雪豹,然后 Safari 决定变得愚蠢。事实证明,Safari 在 64 位模式下只会加载 64 位二进制文​​件。(您可以将其置于 32 位模式,但这不是一个选项。)我更改了构建系统 (g++) 以支持构建通用二进制文件而不是单个 32 位二进制文​​件。我已经成功地创建了一个通用二进制文件,但是当我尝试将它加载到我的小程序中时,我得到一个不满意的链接异常,说没有找到合适的图像并且它无法映射它。以前有没有人处理过这个问题?

有关更多信息...当我在终端中输入“文件 native.dylib”时,原来的 32 二进制文件显示为:
Mach-O 动态链接共享库 i386

当我对通用二进制文件执行相同操作时,结果如下:
native.dylib:具有 2 个架构的 Mach-O 通用二进制
native.dylib(用于架构 i386):Mach-O 对象 i386
native.dylib(用于架构x86_64): Mach-O 64 位对象x86_64

0 投票
2 回答
4532 浏览

python - 在 32 位模式下运行 OS X 通用二进制文件

我有一个第三方库(Xerox 有限状态工具的接口),它作为通用二进制文件提供,内部有两个变体:PPC 和 i386 变体。我还有一个到库的 Python 接口(它使用 ctypes)。

但是当我尝试运行 Python 接口提供的示例代码时,我收到一个错误,抱怨库是错误的架构:

ImportError: dlopen(/Users/arne/sw/lib/libxcfsm.dylib, 10): 找不到合适的图像。确实找到了:
/Users/arne/sw/lib/libxcfsm.dylib: mach-o,但是架构错误

据我所知,这是因为除了我的库中的两个版本之外,python 可执行文件内部还有一个 x86_64 变体,并且更喜欢在该模式下运行。对于某些脚本,我有什么方法可以强制 python 可执行文件启动 i386 版本而不是 x86_64 版本吗?

0 投票
2 回答
5426 浏览

macos - Boost:用于 Boost 的 MacOSX 二进制文件

Boost 是否有任何 MacOSX 通用二进制文件(对于 >=macosx10.3 至少为 i386/ppc)?

0 投票
4 回答
1035 浏览

macos - 在运行时检查 MAC 上 C 程序的 CPU 类型

C 程序如何在 RUN 时(不是编译时)确定它是在 Little-Endian 还是 Big-Endian CPU 上运行?

它必须是“运行时”检查而不是“编译时”的原因是因为我正在使用带有 Intel-CPU 的 MAC 以 MAC OSX 的通用二进制格式构建程序。该程序预计可在 Intel 和 Power-PC CPU 上运行。即,通过MAC上的通用二进制格式,我想使用Intel-CPU构建一个程序并在PPC CPU下运行它。

我的程序中需要 CPU 检查的逻辑是 64 位整数的主机到网络字节顺序更改函数。现在我让它盲目地交换字节顺序,这在 Intel-CPU 上工作正常,但在 PPC 上中断。这是C函数:

以跨平台方式执行此操作的任何更好方法?

谢谢

0 投票
2 回答
1894 浏览

python - Mac 10.6 通用二进制 scipy:找不到 cephes/specfun "_aswfa_" 符号

当编译为 i386/x86_64 通用二进制文件并在我的 64 位 10.6.2 MacPro1,1 上执行时,我无法让 scipy 在 32 位模式下运行。

我的蟒蛇设置

在这个答案的帮助下,我构建了 python 2.6.4 的 32/64 位英特尔通用二进制文件,目的是使用arch命令在架构之间进行选择。(我设法使用 lipo 制作了一些我想要的库的通用二进制文件。)这一切都有效。然后,我根据hyperjeff 的文章中的说明安装了 scipy ,仅使用了更新的 numpy (1.4.0),并在安装 scipy 期间略过了将 numpy 移到一边的内容。

现在,据我所知,除了 scipy 之外的所有东西似乎都在工作,而且我确实可以使用arch -i386 pythonand在 32 位和 64 位模式之间进行选择arch -x86_64 python

错误

Scipy 在 32 位模式下抱怨:

尝试追踪问题

看起来 scipy.interpolate 导入了一个叫做 的东西_cephes,它寻找一个叫做的符号,_aswfa_但在 32 位模式下找不到它。浏览 scipy 的源码,我ASWFA在 specfun.f 中找到了一个子程序。唯一具有相似名称的 scipy 产品文件是 specfun.so,但它和 _cephes.so 似乎都是通用二进制文件:

哼哼。我被困住了。我可能会尝试但还没有弄清楚如何包括手动编译 specfun.so 的事情,不知何故。

我想所有 32 位机器的 scipy 都没有损坏,所以我猜我安装它的方式有问题,但我不知道是什么。

考虑到我相当独特的 (?) 设置,我真的不期待一个完整的答案,但如果有人有任何线索可以为我指明正确的方向,他们将不胜感激。

(编辑)解决问题的更多细节:

我正在使用 gfortran(来自 GCC 4.2.1 Apple Inc. build 5646 的 GNU Fortran)。

Python 2.6.4 或多或少是这样安装的:

Scipy 0.7.1 的安装与此处描述的差不多,但归结为一个简单的sudo python setup.py install.

如果nm按照 David Cournapeau 的建议查看带有 的 _cephes 库,确实会出现该符号在 i386 架构中未定义:

但是,我还不能解释它的缺席。

0 投票
4 回答
3068 浏览

c++ - 如何使用动态库在 Xcode 中为 OSX 10.4、10.5 和 10.6 构建 C++

我正在 Xcode 中构建一个 C++ 命令行工具。该项目包含用于 curl、boost 和 log4cpp 的 dylib。

理想情况下,我喜欢构建一个支持 10.4 到 10.6 的 i386 通用二进制文件。

我似乎无法编译 Xcode,当我以 10.4 为目标时,它说没有这样的文件或目录。

当我以 10.6 x_64 为目标时,它可以构建,但 10.5 i386 抱怨我的 dylib 不是 10.5 的正确架构?

我应该使用什么版本的 GCC?

另外,当我使用 PackageMaker 创建安装包时,安装程​​序应该将工具所需的 dylib 放在哪里?

非常感谢,托比。

0 投票
2 回答
7064 浏览

iphone - 为 armv6 和 armv7 构建包含另一个静态库的 iPhone 静态库

我有一个 Xcode 项目,它有一个“主”静态库目标,它包含/链接到来自其他 Xcode 项目的一堆其他静态库。

在为“Optimized (armv6 armv7)”构建主库目标时,在 CreateUniversalBinary 步骤的最后阶段出现错误。对于主库包含的库的每个.o文件,都会报告以下错误(例如,FBConnectGlobal.o文件):

最后,Xcode 告诉我们构建成功。但是,当在应用程序项目中使用最终的静态库时,它不会构建,因为它在构建的一个部分 (armv6) 中找到重复的符号,而在构建的另一部分 (armv7) 中丢失符号。

任何想法如何解决这一问题?

0 投票
1 回答
3521 浏览

iphone - 将单独的 iPad/iPhone 目标变成通用应用程序

当我开始我的通用应用程序时,我认为一个目标选项会做太多工作,所以我选择了单独的目标。在制作应用程序的 iPad 部分的过程中,我意识到制作通用应用程序会更容易。问题是,我不能使用 Apple 的选项将我的 iPhone 目标转换为通用,因为已经有单独的目标。是否有一种解决方法可以让我将我的 iPhone 目标升级到通用?