由于Apple不支持GCC 4.6或GCC 4.7,我刚刚切换到MacPorts的GCC 4.6 / 4.7版本。但是,我在“通用”架构中构建代码时遇到了问题。
传统上,我会g++ -arch i386 -arch x86_64 ...
为至少i386 / x86_64架构编译我的二进制文件。我做了一些搜索,并意识到-arch选项只有apple的编译器支持。所以当然它不适用于Macports。我能做的最好的事情是使用-m32
/ -m64
选项来指定我想要的架构。但是,这只会生成i386或x86_64格式的二进制文件。我真正想要的是在两个架构(Universal)中获取二进制文件,就像使用原始GCC编译器一样。
这是不受支持还是已知问题?我已经尝试了整晚在Google上寻找答案,但我没有得到任何有用的东西。所以我只是开始怀疑我是否是唯一有这个问题的人,而且我错过了让它发挥作用的重要事项?真的很感激,如果有人能给我一些建议。
顺便说一句。我已经安装了gcc46 +universal
变体,但除了为每个体系结构编译单独的二进制文件之外,它没有产生任何真正的通用。
性
答案 0 :(得分:6)
哦,我刚遇到这个问题,花了相当多的时间。事实证明,GCC 4.2.1的苹果版本实际上只是一个包装器,它尊重一些标志(特别是-arch标志),然后使用lipo将目标文件粘在一起形成一个胖对象。我稍微修改了这个驱动程序,以便在保持-arch标志的同时包装macports GCC并生成多个arch目标文件(无论如何都是32位和64位intel)。
我刚刚发布了一篇关于如何做到这一点的相当广泛的文章:
http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html
答案 1 :(得分:3)
您可以使用lipo将具有不同体系结构的二进制文件合并到一个通用中。