10

我正在尝试在 Mac OS 10.8.2 上使用自编译的 GCC-4.7.1 编译程序。程序使用openMP,编译成功;但是,当我尝试运行程序时,动态链接器会抱怨

dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address
  Referenced from: /usr/local/gcc-4.7.1/lib/libgomp.1.dylib
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: ___emutls_get_address
  Referenced from: /usr/local/gcc-4.7.1/lib/libgomp.1.dylib
  Expected in: /usr/lib/libSystem.B.dylib

这个问题经常出现在使用 -fopenmp 编译的任何程序中,包括 MWE

#include <stdio.h>

int main() {
  #pragma omp parallel
  printf("Hallo!\n");
  return 0;
}

请注意,什么是“___emutls_get_address”符号中建议的解决方案?,即-lgcc_eh在链接阶段添加,不起作用(我仍然收到相同的 dyld 错误消息)。

4

2 回答 2

9

我也有同样的问题。而且我是 openMP 的新手,使用 Michal Fapso 提供的解决方案我的技能不是很好。我通过使用解决了这个问题

brew link --overwrite gcc

问题就解决了!

也许您可以尝试将 gcc 重新安装到您的 Mac。

于 2019-04-03T16:37:24.983 回答
3

我有完全相同的问题。在我的情况下,它是由链接到由 XCode 安装的旧版本 gcc 的库(我不记得是哪个库)引起的,该库位于 /usr/lib 中。当我更正它以链接到我用于编译(在 /usr/local 中)的较新版本的 gcc 库时,此错误已修复。

因此,只需检查您构建的可执行文件及其链接的所有库

otool -L EXECUTABLE_OR_DYLIB

如果您发现任何与旧 gcc 库相关的内容,请修复它。

于 2014-05-13T19:06:36.163 回答