使用Autoconf在Mac上检测32对64位Intel CPU

时间:2009-03-04 22:03:28

标签: macos 64-bit shared-libraries autoconf

我正在开发一个项目的Autoconf脚本,该脚本应该在Linux和Mac上运行,32位和64位。在Linux上,检测64位很容易:x86_64得到i386而不是build_cpu。我无法弄清楚如何为Mac执行此操作:32位和64位计算机都为i386提供build_cpu。有没有办法使用Autoconf builtins检测差异?

额外问题:在64位CPU上,有一种更好的方法可以以编程方式检测二进制文件是32位还是64位而不是以下内容?

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

3 个答案:

答案 0 :(得分: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来确定你在哪个框。

答案 1 :(得分:2)

i386获得build_cpu的原因可能是因为gcc默认情况下在Mac OS X上以32位模式编译,即使在64位CPU上也是如此。处理此问题的最简单方法可能是将其推送给用户:如果他们想要64位二进制文​​件,他们可以将--build=x86_64-darwin传递给configure

答案 2 :(得分:0)

要记住的一件事是,在Mac上,您可以编译多个体系结构,并生成“通用二进制文件”(以前称为“胖二进制文件”)。简单地使用-arch i386 -arch x86_64编译可能会更好,这将允许用户在运行时选择运行哪一个(如果你想支持旧的PPC Mac,你还可以包括-arch ppc -arch ppc64)。这样,如果用户最终将他们的文件系统从一台机器移动到另一台机器,他们仍然会为给定的机器提供适当的二进制文件。有关详细信息,请参阅64-bit Transition Guide