在 OSX 10.6 上使用 make
构建 C++ 项目时,我确定预处理器定义 __LP64__
似乎始终自动由编译器(即,它没有在任何头文件中定义)(参见 Where is __LP64__ defined for default builds of C++ applications on OSX 10.6? )。这就引出了一个问题:是否有可能在 OSX 10.6 上构建一个面向(并运行)另一个 OSX 10.6 系统的 32 位应用程序?
我听说 OSX 10.6始终是 64 位操作系统 - 甚至不可能将 OSX 10.6 作为 32 位操作系统运行。如果是这种情况,那么在 OSX 10.6 上构建可在另一个 OSX 10.6 系统上运行的 32 位应用程序是不可能的。
我需要知道这一点,以便知道我是否正在构建 64 位应用程序(我一直在尝试将当前项目构建为 32 位应用程序,因为相应的 Windows 版本也在构建中作为 32 位 - 但也许我需要启用所有 64 位标志并将此应用程序的 OSX 10.6 版本构建为成熟的 64 位应用程序)。
最佳答案
是的,完全有可能做到这一点。一个有限的演示:
$ tar -xf Packages/range-1.14.tgz
$ cd range-1.14
$ ls
COPYING Makefile README gpl-3.0.txt range.c range.mk stderr.c stderr.h
$ rmk CC='gcc -m32'
gcc -m32 -g -c stderr.c
gcc -m32 -g -c range.c
gcc -m32 -o range -g stderr.o range.o
$ file range
range: Mach-O executable i386
$ rmk -u CC='gcc -m64'
gcc -m64 -g -c stderr.c
gcc -m64 -g -c range.c
gcc -m64 -o range -g stderr.o range.o
$ file range
range: Mach-O 64-bit executable x86_64
$
rmk -u
相当于 (GNU) make -B
。这个GCC是我自制的4.6.0。您可以使用 Apple 提供的 GCC 版本执行更多操作,例如交叉编译和/或通用构建。
关于c++ - 是否可以在 OSX 10.6 上构建在其他 OSX 10.6 系统上运行的 32 位应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6721097/