【问题标题】:Building from the command line to produce a binary for Mac OS 10.5 (and 10.6)从命令行构建以生成适用于 Mac OS 10.5(和 10.6)的二进制文件
【发布时间】:2010-11-26 06:55:09
【问题描述】:

我指的是以下来源:http://clpbar.sourceforge.net

构建过程为标准:./configure 后跟make

如果我在 10.5 上构建,我会得到一个二进制文件,其 file 包含:Mach-O executable i386
如果我在 10.6 上构建,我会得到一个二进制文件,其 file 包含:Mach-O 64-bit executable x86_64

如何在 10.6 上从命令行构建并生成 Mach-O executable i386 类型的可执行文件,或者更好的是包含两种类型的可执行文件的通用二进制文件。

请测试任何建议的解决方案。

谢谢,
马特

【问题讨论】:

    标签: command-line build-process build macos compilation


    【解决方案1】:

    默认情况下,随 OS X 10.6 分发的 GCC 版本构建 64 位二进制文​​件。随 10.5 分发的 GCC 版本默认构建 32 位二进制文​​件。

    在运行 ./configure 之前,设置一些环境变量。如果您希望它是具有 i386 和 x86_64 代码的 Intel 通用二进制文件,请设置以下变量(假设您使用的是 bash):

    export CFLAGS="-arch i386 -arch x86_64"
    export CXXFLAGS=$CFLAGS
    export LDFLAGS=$CFLAGS
    

    这将告诉配置脚本传递这些编译器和链接器选项,从而构建具有 i386 和 x86_64 架构的二进制文件。

    或者,如果您希望它只构建为 i386 二进制文件:

    export CFLAGS="-arch i386"
    export CXXFLAGS=$CFLAGS
    export LDFLAGS=$CFLAGS
    

    【讨论】:

    • 我刚刚尝试过,但没有成功。会不会是环境变量被 ./configure 覆盖了?
    【解决方案2】:

    来自 Apple 开发者论坛:

    ./configure CC="gcc -arch i386" CXX="g++ -arch i386"
    

    效果很好。

    【讨论】:

    • 我认为这不会构建具有“两种”类型的通用二进制文件?
    • @rogerdpack 试试看。使用file 命令检查二进制文件以查看它包含哪些架构。另外,请参阅其他答案。
    【解决方案3】:

    为每个目标使用 -arch 标志。所以,例如

    gcc -arch i386 -arch x86_64 ...
    

    会用两者构建一个胖二进制文件。我相信默认情况下 gcc 会构建到目标架构,即 x86_64 和 OSX 10.6。

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      相关资源
      最近更新 更多