我最终希望使用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'
无效
我不知道触发这些错误消息的问题是什么。有人可以帮忙吗?
答案 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