【问题标题】:Can't compile with gcc-4.9无法用 gcc-4.9 编译
【发布时间】:2017-05-15 12:02:47
【问题描述】:

我最终想使用 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' 无效

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

【问题讨论】:

  • 呃,Yosemite 是 v10.10,Leopard 是 v10.5...
  • 糟糕!谢谢马克。应该说优胜美地(OS 10.10.5)
  • 您是否使用/usr/local/bin/gcc-4.9 作为您的编译器?编译时使用了哪些标志?您是否尝试过编译一段微不足道的代码?你用brew install gcc-XYZ --without-multilib了吗?
  • 感谢马克的帮助;非常感谢。我在命令行上从 gcc-4.9 开始,但 /usr/local/bin 在我的 PATH 上。无论我在编译时使用 -fopenmp 还是 -Wall 标志,我都遇到了同样的问题。我会尝试你编译一段简单代码的建议。如果我没记错的话,我只是简单地使用了 brew install gcc@4.9 而没有其他任何东西。
  • 马克,你显然很好地解决了我的问题。是的,当我尝试使用 gcc-4.9 编译一个没有编译指示、没有 GSL、没有动态内存分配等的简单 C 程序时,我会收到以 /var 开头的相同错误消息流!

标签: parallel-processing gcc4.9


【解决方案1】:

以下内容总结了 cmets 部分中解决的问题,并确实导致了问题的解决。并非所有步骤都是必需的,但大多数可能都是好的做法。


第 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 位操作系统。在 GCC 案例中,这可能是指拥有所有 GCC “胖”Mach-O 格式的运行时库,即 i386 的版本 和 x86_64 在同一个共享库文件中。可能是那个 libgomp (GNU OpenMP 运行时库)不能以这种方式构建。

this question

关键字:gcc、g++、GNU 编译器、OpenMP、fopenmp、-fopenmp、Xcode、multilib、命令行工具、macOS、OSX、homebrew、brew

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多