【问题标题】:Can I compile universal code using Macports' GCC?我可以使用 Macports 的 GCC 编译通用代码吗?
【发布时间】:2011-12-14 00:05:51
【问题描述】:

由于 Apple 不支持 GCC 4.6 或 GCC 4.7,我只是切换到 MacPorts 的 GCC 4.6/4.7 版本。但是,我在“通用”架构中构建代码时遇到了问题。

传统上,我会使用g++ -arch i386 -arch x86_64 ... 为至少 i386/x86_64 架构编译我的二进制文件。我做了一些搜索,发现只有苹果的编译器支持 -arch 选项。所以当然它不适用于 Macports。我能做的最好的就是使用-m32/-m64 选项来指定我想要的架构。但是,这只会产生 i386 或 x86_64 格式的二进制文件。我真正想要的是在两种架构(通用)中获得一个二进制文件,就像使用原始 GCC 编译器所做的那样。

这是不支持还是已知问题?我整晚都在谷歌上寻找答案,但我没有得到任何有用的东西。所以我开始怀疑我是否是唯一一个有这个问题的人,我错过了一些非常重要的事情来让它工作?如果有人能给我一些建议,真的很感激。

顺便说一句。我已经安装了gcc46 +universal 变体,但是除了为每个架构编译单独的二进制文件之外,它并没有产生任何真正通用的东西。

兴。

【问题讨论】:

    标签: macos macports gcc4


    【解决方案1】:

    哦,我刚遇到这个问题,花了很多时间。事实证明,苹果版的 GCC 4.2.1 实际上只是一个包装器,它尊重一些标志(特别是 -arch 标志),然后使用 lipo 将对象文件重新组合成一个胖对象。我稍微修改了这个驱动程序,以便它可以包装 macports GCC,同时仍然尊重 -arch 标志并生成多拱目标文件(无论如何对于 32 位和 64 位英特尔)。

    我刚刚发布了一篇关于如何做到这一点的相当广泛的文章:

    http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html

    【讨论】:

      【解决方案2】:

      您可以使用 lipo 将具有不同架构的二进制文件组合成一个通用文件。

      【讨论】:

      • 谢谢你的作品。我不知道有脂肪,我想我真正需要的只是脂肪。我需要更改我的一些 Makefile 以停止拱标志并使用 lipo 现在生成通用代码:)
      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多