缺少带有gcc-4.7和openMP的emutls\U get\U地址

缺少带有gcc-4.7和openMP的emutls\U get\U地址,gcc,openmp,dynamic-linking,gcc4.7,Gcc,Openmp,Dynamic Linking,Gcc4.7,我试图在MacOS10.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

我试图在MacOS10.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;
}
#包括
int main(){
#pragma-omp并行
printf(“你好!\n”);
返回0;
}

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

我遇到了完全相同的问题。在我的例子中,这是由于链接到一个由XCode安装的较旧版本的gcc库(我不记得是哪个库)引起的,它位于/usr/lib中。当我将其更正为与我用于编译的版本(在/usr/local中)的较新的gcc库相链接时,这个错误被修复了

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

otool -L EXECUTABLE_OR_DYLIB

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

我也遇到了完全相同的问题。 我是openMP新手,我的技能不适合使用Michal Fapso提供的解决方案。 我用计算机解决这个问题

brew link --overwrite gcc
问题解决了


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

奇怪,我最近确实根据在OS X 10.8.2上编译了gcc 4.7.1,OpenMP支持工作得非常完美。@hristoilev我将再次检查我是如何编译的,并尝试重新编译。希望这个问题消失了……一个类似的问题和答案已经发布在那里:在将org.deeplearning4j的版本从1.0.0-beta5升级到1.0.0-beta6之后就可以了。