是否可以在OSX 10.6上构建在其他OSX 10.6系统上运行的32位应用程序? 当使用OSX 10.6构造C++项目时,我已经确定预处理器定义αLp64α似乎总是由编译器自动设置,即它没有在任何头文件中定义,请参见。这就引出了一个问题:是否有可能在OSX 10.6上构建一个32位的应用程序,以另一个OSX 10.6系统为目标并在其上运行

是否可以在OSX 10.6上构建在其他OSX 10.6系统上运行的32位应用程序? 当使用OSX 10.6构造C++项目时,我已经确定预处理器定义αLp64α似乎总是由编译器自动设置,即它没有在任何头文件中定义,请参见。这就引出了一个问题:是否有可能在OSX 10.6上构建一个32位的应用程序,以另一个OSX 10.6系统为目标并在其上运行,c++,macos,makefile,osx-snow-leopard,C++,Macos,Makefile,Osx Snow Leopard,我听说OSX 10.6始终是一个64位操作系统——甚至不可能将OSX 10.6作为32位操作系统运行。如果是这种情况,那么在另一个OSX 10.6系统上运行的OSX 10.6上构建32位应用程序是不可能的 我需要知道这一点,这样我就可以知道我是否正在构建一个64位应用程序。我一直在尝试将我当前的项目构建为一个32位应用程序,由于相应的Windows版本也将构建为32位-但也许我需要启用所有64位标志,并将此应用程序的OSX 10.6版本构建为一个成熟的64位应用程序。Mac OS X 10.6在

我听说OSX 10.6始终是一个64位操作系统——甚至不可能将OSX 10.6作为32位操作系统运行。如果是这种情况,那么在另一个OSX 10.6系统上运行的OSX 10.6上构建32位应用程序是不可能的


我需要知道这一点,这样我就可以知道我是否正在构建一个64位应用程序。我一直在尝试将我当前的项目构建为一个32位应用程序,由于相应的Windows版本也将构建为32位-但也许我需要启用所有64位标志,并将此应用程序的OSX 10.6版本构建为一个成熟的64位应用程序。

Mac OS X 10.6在32位Intel Mac上运行得非常好。它放弃了对PowerPC的支持。Mac OS X cough的未来版本可能会也可能不会放弃对32位Intel Mac的支持,这需要64位系统

然而,即使是64位Mac也隐式支持运行32位进程,GCC可以交叉编译i386目标或PPC/PPC64/ARMv6/ARMv7目标。但是,您必须确保在构建标志中指定了所需的体系结构,否则它将默认为本机体系结构,即x86_64

如果使用xcodebuild命令行实用程序并将路径传递给Xcode项目包,则在调用GCC时,它将自动使用项目中的生成设置。除非您是从generic*NIX源代码编译,否则很少需要在Mac OS X上直接使用GCC


如果您告诉我们为什么在Mac OS X上使用make,我们可能会给您更具体的建议,但Mac OS X上首选的命令行编译方法仍然是xcodebuild。

Mac OS X 10.6在32位Intel Mac上运行得非常好。它放弃了对PowerPC的支持。Mac OS X cough的未来版本可能会也可能不会放弃对32位Intel Mac的支持,这需要64位系统

然而,即使是64位Mac也隐式支持运行32位进程,GCC可以交叉编译i386目标或PPC/PPC64/ARMv6/ARMv7目标。但是,您必须确保在构建标志中指定了所需的体系结构,否则它将默认为本机体系结构,即x86_64

如果使用xcodebuild命令行实用程序并将路径传递给Xcode项目包,则在调用GCC时,它将自动使用项目中的生成设置。除非您是从generic*NIX源代码编译,否则很少需要在Mac OS X上直接使用GCC


如果您告诉我们为什么在Mac OS X上使用make,我们可能会给您提供更具体的建议,但Mac OS X上首选的命令行编译方法仍然是xcodebuild。

是的,完全有可能做到这一点。一个有限的演示:

$ 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。你可以使用苹果提供的GCC版本做更多的事情,比如交叉编译和/或通用版本。

是的,这是完全可能做到的。一个有限的演示:

$ 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。您可以使用苹果提供的GCC版本做更多事情,比如交叉编译和/或通用版本。

我使用make来简化Linux和OSX的跨平台版本。这是一个没有GUI的服务器应用程序,只有极少数的OS特定调用大多嵌入在诸如升压的C++库中。因此,为构建过程定义一个在Linux和OSX上都可以遵循的过程是最方便的。否则,如果使用Xcode构建,我们需要两套完全不同的Linux构建和OSX构建指令。这看起来合理吗?另外,也许更重要的是,有些补丁文件是为某些第三方库Xerce编写的,特别是修改了与runConfigure和make(而不是Xcode)一起使用的配置文件,如果我被迫使用Xcode,我将不得不手动完成并对Xcode项目设置进行相同的更改。更准确地说,10.6放弃了在PowerPC机器上启动的支持,但几乎所有现代PPC应用程序,即那些在经典环境之外的10.5或10.4上运行的应用程序,在10.6上仍然运行良好,多亏了罗塞塔。在大多数情况下,可以使用arch1从命令行强制执行环境,即arch-i386/usr/bin/python2.6或arch-ppc/usr/bin/python2.6。显然,这将在10.7年发生变化;我只是指
操作系统将在其上运行的硬件。我使用make来简化Linux和OSX上的跨平台构建。这是一个没有GUI的服务器应用程序,只有极少数的OS特定调用大多嵌入在诸如升压的C++库中。因此,为构建过程定义一个在Linux和OSX上都可以遵循的过程是最方便的。否则,如果使用Xcode构建,我们需要两套完全不同的Linux构建和OSX构建指令。这看起来合理吗?另外,也许更重要的是,有些补丁文件是为某些第三方库Xerce编写的,特别是修改了与runConfigure和make(而不是Xcode)一起使用的配置文件,如果我被迫使用Xcode,我将不得不手动完成并对Xcode项目设置进行相同的更改。更准确地说,10.6放弃了在PowerPC机器上启动的支持,但几乎所有现代PPC应用程序,即那些在经典环境之外的10.5或10.4上运行的应用程序,在10.6上仍然运行良好,多亏了罗塞塔。在大多数情况下,可以使用arch1从命令行强制执行环境,即arch-i386/usr/bin/python2.6或arch-ppc/usr/bin/python2.6。显然,这将在10.7年发生变化;我只是指操作系统将运行的硬件。谢谢。我丢失的是-m32标志。事实上,我应该知道这一点,或者看看ManMake,但我认为第三方项目的runConfigure文件(它有自己的32位构建标志)会处理好它。谢谢。我丢失的是-m32标志。事实上,我应该知道这一点,或者看看ManMake,但我假设第三方项目的runConfigure文件(它有自己的32位构建标志)会处理它。