5

由于 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变体,但是除了为每个架构编译单独的二进制文件之外,它并没有产生任何真正通用的东西。

兴。

4

2 回答 2

6

哦,我刚遇到这个问题,花了很多时间。事实证明,苹果版的 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

于 2012-03-02T08:20:07.667 回答
3

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

于 2011-12-14T00:51:04.607 回答