c++ - 是否可以在 OSX 10.6 上构建在其他 OSX 10.6 系统上运行的 32 位应用程序?

标签 c++ macos makefile osx-snow-leopard

在 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/

相关文章:

c++ - 根据字符串大小对字符串 vector 进行排序

c++ - 模板映射的设计问题采用不同的结构

c - 内核模块编译器错误 : function declaration isn’t a prototype [-Werror=strict-prototypes]

当 makefile 调用 GCC 时,C 程序不会在没有警告的情况下编译 - 否则可以工作

git - git如何正确使用gettext?

c++ - #include <fstream> visual c++ 2010 无法正常工作

C++ | cout, 打印返回的对象

xcode - 粘贴数据或 CMD V 模拟的替代方案

macos - 未调用 configurePersistentStoreCoordinator 来保存 NSPersistentDocument

bash - Mercurial 大号