1

我正在为应该在 32 位和 64 位 Linux 和 Mac 上运行的项目开发 Autoconf 脚本。在 Linux 上,检测 64 位很容易:你得到x86_64而不是i386for build_cpu. 我不知道如何为 Mac 做到这一点:32 位和 64 位机器都i386提供build_cpu. 有没有办法使用 Autoconf 内置函数来检测差异?

额外问题:在 64 位 CPU 上,是否有比以下方法更好的方法来以编程方式检测二进制文件是 32 位还是 64 位?

file NAME_OF_BINARY | sed -e 's/.*[^0-9]\([0-9]*\)-bit.*/\1/g'
4

3 回答 3

2

The reason you get i386 for build_cpu is probably because gcc compiles in 32-bit mode by default on Mac OS X, even on 64-bit CPUs. The easiest way to handle this is probably to push it off on the user: if they want a 64-bit binary, they can pass in --build=x86_64-darwin to configure.

于 2009-04-06T13:15:22.823 回答
2

要找出二进制文件支持哪些架构,您可以使用文件,您可以解析 的输出otool -f [name of bin],您可以解析 的输出lipo -info [name of bin],或者您可以自己读取胖文件头(这是一个相当简单且有据可查的结构)。如果您有一个单一架构的二进制文件,那么otool可以告诉您有关 Mach-O 标头的信息,该标头告诉您它是为哪个架构编译的。

不知道 autoconf 在内部作为主机架构为您提供了什么,但作为 x86_64 Mac 可以运行 x86_64、i386 或 ppc7400 二进制文件,区别有点没有实际意义。要么编译一个通用二进制文件,这是 Apple 建议你做的,要么查看sysctl hw.optional.x86_64以确定你在哪个盒子上。

于 2009-03-04T22:21:59.903 回答
0

要记住的一件事是,在 Mac 上,您可以针对多种架构进行编译,并生成“通用二进制文件”(以前称为“胖二进制文件”)。简单地同时编译可能会更好-arch i386 -arch x86_64,这将允许用户在运行时选择运行哪一个(-arch ppc -arch ppc64如果你想支持旧的 PPC Macs,你也可以包括在内)。这样,如果用户最终将他们的文件系统从一台机器移动到另一台机器,他们仍将拥有适用于给定机器的二进制文件。有关详细信息,请参阅64 位转换指南

于 2009-04-09T14:39:40.520 回答