使用gcc-4.7和openMP缺少___emutls_get_address

问题描述 投票:7回答:2

我试图在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;
}

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

gcc openmp dynamic-linking gcc4.7
2个回答
1
投票

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

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

otool -L EXECUTABLE_OR_DYLIB

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


0
投票

我也遇到了同样的问题。我是openMP的新手,使用Michal Fapso提供的解决方案我的技巧并不好。我通过使用来解决这个问题

brew link --overwrite gcc

问题解决了!

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

© www.soinside.com 2019 - 2024. All rights reserved.