最新版本的GCC(4.6)如何在Mac OS下与Qt一起使用?

时间:2011-06-06 13:36:14

标签: qt macos gcc openmp

我的问题与此处讨论的问题有关:

Is there a way that OpenMP can operate on Qt spanwed threads?

尝试在Mac OS下运行我的基于Qt的程序,在辅助线程中有一个OpenMP子句时,它崩溃了。浏览网页后,现在我明白这是由Apple提供的gcc相当旧版本(4.2)中的错误造成的。

然后我从http://hpc.sourceforge.net下载了最新的4.6版gcc,并尝试编译项目,但是我从g ++编译器得到了以下错误:

无法识别的选项'-arch' 无法识别的选项'-Xarch_x86_64'

我了解到这是因为这些是选项,只能由自定义配置的Apple-gcc编译器解释,而不能由标准gcc解释。

有人可以帮助我吗?我可以克服这个问题并配置g ++ 4.6与Qt一起使用以获得无错误的OpenMP支持吗?我承认我在Mac OS平台上是关于编译器和编程的新手,并希望从Visual Studio-Qt环境中移植我的代码。

非常感谢提前!

4 个答案:

答案 0 :(得分:2)

如果你不害怕搞乱你的Qt安装,那么更改〜/ QtSDK / Desktop / Qt / 4.8.1 / gcc / mkspecs / common / g ++ - macx.conf中的QMAKE_CFLAGS_X86_64条目。

将'-Xarch_x86_64'替换为'-arch x86_64'。

答案 1 :(得分:1)

您可以使用非Apple gcc v4.6并为要构建的每个体系结构编译二进制文件(对于i386和x86_64,使用--target = $ {ARCH}应该没问题)。然后,一旦你为每个架构都有一个二进制文件,就像使用lipo一样: lipo -create -arch i386 binary_32bit -arch x86_64 binary_64bit -output binary_universal 这将从binary_32bit和binary_64bit创建一个名为binary_universal的胖二进制文件(也称为通用二进制文件)。

或者您可以使用clang / llvm而不是gcc,它可能没有您描述的错误(如果通过Apple的开发人员工具提供)应该能够直接编译通用二进制文件。

答案 2 :(得分:0)

你应该运行qmake woth对应的-spec选项,例如,在freebsd上使用gcc46需要运行qmake所以: qmake --spec = freebsd -g ++ 46

答案 3 :(得分:0)

Lipo确实可以用来将多个目标文件放在一起形成一个“胖”对象文件,实际上事实证明这正是苹果公司的编译器所做的。他们的GCC编译器实际上是一个驱动程序,它将各种体系结构映射到适当的体系结构编译器,然后使用lipo将对象混合在一起。

请参阅:http://lists.macosforge.org/pipermail/macports-dev/2011-September/016210.html

以下是该驱动程序的源文件:

http://opensource.apple.com/source/gcc/gcc-5666.3/driverdriver.c

所有人都需要做的是获得一个新版本的GCC来支持-arch标志是修改这个驱动程序并让它指向你的gcc版本的脚本包装器,它为给定的体系结构添加了适当的标志,然后传递所有其余的参数。像这样:

#!/ bin / sh的

/opt/local/bin/gcc-mp-4.6 -m32 $ @

#!/ bin / sh的

/opt/local/bin/gcc-mp-4.6 -m64 $ @

这是一个链接,讨论如何做到这一点,并提供一个cmake项目,以便轻松获取GCC的macports版本,并支持两个英特尔架构的-arch标志:

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