Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mac OS下,GCC(4.6)的最新版本如何与Qt一起使用?_Qt_Macos_Gcc_Openmp - Fatal编程技术网

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

在Mac OS下,GCC(4.6)的最新版本如何与Qt一起使用?,qt,macos,gcc,openmp,Qt,Macos,Gcc,Openmp,我的问题与这里讨论的问题有关: 当我试图在Mac OS下运行我的基于Qt的程序时,该程序在一个辅助线程中有一个OpenMP子句,它崩溃了。在浏览完网络之后,我现在明白了这是由苹果公司提供的gcc的一个相当旧的版本(4.2)中的一个bug引起的 然后,我从下载了最新的4.6版本的gcc,并尝试编译该项目,但我从g++编译器获得了以下错误: 无法识别的选项“-arch” 无法识别的选项“-Xarch\u x86\u 64” 我了解到这是因为这些选项只能由自定义配置的Apple gcc编译器解释,而

我的问题与这里讨论的问题有关:

当我试图在Mac OS下运行我的基于Qt的程序时,该程序在一个辅助线程中有一个OpenMP子句,它崩溃了。在浏览完网络之后,我现在明白了这是由苹果公司提供的gcc的一个相当旧的版本(4.2)中的一个bug引起的

然后,我从下载了最新的4.6版本的gcc,并尝试编译该项目,但我从g++编译器获得了以下错误:

无法识别的选项“-arch” 无法识别的选项“-Xarch\u x86\u 64”

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

有谁能帮我解决这个问题并将g++4.6配置为与Qt一起使用以获得无bug的OpenMP支持吗?我承认我是MacOS平台下编译器和编程方面的新手,我想从VisualStudioQT环境移植我的代码


非常感谢

您可以使用非Apple gcc v4.6并为要构建的每个体系结构编译一个二进制文件(对于i386和x86_64,使用--target=${ARCH}应该可以)。然后,一旦每个架构都有一个二进制文件,请使用lipo,如下所示:
lipo-create-arch i386二进制\u 32位-arch x86\u 64二进制\u 64位-output binary\u universal
这将从binary_32位和binary_64位创建一个名为binary_universal的fat二进制文件(也称为通用二进制文件)


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

您应该运行qmake woth相应的-spec选项,例如,要在freebsd上使用gcc46,需要运行qmake,以便:
qmake--spec=freebsd-g++46确实可以使用Lipo将多个对象文件合并到一个“胖”对象文件中,事实证明这正是苹果编译器所做的。他们的GCC编译器实际上是一个驱动程序,它将各种体系结构映射到相应的体系结构编译器,然后使用lipo将对象混合在一起

见:

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

要获得一个新版本的GCC以使用-arch标志,只需修改此驱动程序,并使其指向您的GCC版本的脚本包装器,该脚本包装器为给定的体系结构添加适当的标志,然后传递所有其余参数。大概是这样的:

#!/垃圾箱/垃圾箱

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

#!/垃圾箱/垃圾箱

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

下面是一个链接,介绍如何进行此操作,并提供了一个cmake项目,用于轻松修复macports版本的GCC,并支持两种intel体系结构的-arch标志:


如果你不怕弄乱你的Qt安装,那么在~/QtSDK/Desktop/Qt/4.8.1/gcc/mkspecs/common/g++-macx.conf中更改QMAKE\u CFLAGS\u X86\u 64条目


将“-Xarch\u x86\u 64”替换为“-arch x86\u 64”。

您能给我们提供更多信息,比如您的configure命令。。。还有几行错误?好吧,这几乎就是我得到的全部,两个无法识别的选项错误和另一个:“x86-64”没有这样的文件或目录。这是在试图编译项目时发生的。我没有使用“配置”,只是在QtCreator的BuildSettings下创建了一个概要文件,以使用GCC4.6。使用Apple GCC编译器,它可以很好地编译。我是否需要通过GCC4.6编译Qt本身?-arch应该在darwin的GCC4.6中,这是有文档记录的。至于错误,如果您试图从qt构建设置中删除arch选项,编译器应该推断出正确的值。这些错误看起来像来自编译管道的几个不同部分的错误。如果没有成绩单中的实际文本,包括记录错误的二进制文件和记录错误的命令行,任何人都很难进一步帮助您。请在你的问题中提供适当的摘录。将整个成绩单(包括您的环境、目录布局和任何配置文件)发布到非现场的某个地方,有兴趣的读者可以在那里查看它们,这也不会有什么坏处,但可能有点过分。这里的问题是clang和llvm gcc不支持我在某个地方读到llvm gcc支持OpenMP(我不知道,因为我不使用它),可能在某个地方。很抱歉,信息有点遗漏。哇,对不起,我不是有意要发布那个评论的。确实如此,但它也是基于GCC4.2的,所以可能会有相同的bug。Dragonegg可能会这样做,但由于它使用FSF GCC,它可能会有相同的问题。很明显,它有可能会出现错误,但是由于llvm生成代码,GCC 4.2仅用于前端编译,因此我认为错误不会那么严重。此外,我还修复了我的帖子中的一个拼写错误(从嘴唇到嘴唇)。