无法用gcc-4.9编译

时间:2017-05-15 12:02:48

标签: parallel-processing gcc4.9

我最终希望使用valgrind来查找导致C程序中偶尔出现奇怪输出的原因,该程序使用OpenMP并行编程将模型与实验数据进行优化。

为了避免使用名义gcc(即clang)编译器,我使用brew在运行Yosemite(OS x 10.10.5)的MacPro上安装gcc-4.9。但是,当尝试使用gcc-4.9编译我的程序时,无论是否有-fopenmp,我都会收到许多类型的错误消息:

  

/var/folders/qc/1j0gr_l48xnfd9001s6tt6f80000gn/T//ccRxnrnU.s:30597:suffix   或者操作数对于'movq'

无效

我不知道触发这些错误消息的问题是什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

以下总结了评论部分中的内容,并确实导致问题得到解决。并非所有步骤都是必要的,但大多数步骤可能都是不错的做法。

第1步 - 清理

如果您一直在尝试许多不同的,可能不兼容的方法来设置OpenMP,那么首先清理它们可能是个好主意。所以,像:

brew rm --force gcc           # or maybe gcc@4.9

第2步 - 更新Xcode和命令行工具

如果您在安装 Xcode 后升级了macOS,则建议您更新 Xcode 及其“命令行工具”

考虑卸载并重新安装 Xcode - 可以从 App Store 免费下载。

使用以下命令安装/更新

后,更新/安装“命令行工具”
xcode-select --install

第3步 - 安装gcc

现在,请尝试重新安装gcc,确保您使用--without-multilib选项:

brew install gcc@4.9 --without-multilib

希望您现在可以使用以下命令编译OpenMP代码:

/usr/local/bin/gcc -fopenmp program.c -o program

我不确定确切原因需要--without-multilib选项,而更喜欢引用@ hristo-iliev:

  

Multilib通常指的是64位和32位的共存   每个库的版本,以便可以运行32位软件   64位操作系统。在海湾合作委员会的案件中,可能是指所有海湾合作委员会   “胖”Mach-O格式的运行时库,即i386的版本   和x86_64在同一个共享库文件中。它可能是libgomp   (GNU OpenMP运行时库)不能以这种方式构建。

请参阅this question

关键字:gcc,g ++,GNU编译器,OpenMP,fopenmp,-fopenmp,Xcode,multilib,命令行工具,macOS,OSX,自制软件,brew