【问题标题】:Missing ___emutls_get_address with gcc-4.7 and openMPgcc-4.7 和 openMP 缺少 ___emutls_get_address
【发布时间】:2012-11-16 10:30:49
【问题描述】:

我正在尝试在 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错误消息)。

【问题讨论】:

  • 奇怪,我最近确实根据this guide 在 OS X 10.8.2 上编译了 GCC 4.7.1,并且 OpenMP 支持完美无缺。
  • @HristoIliev 我将再次检查我是如何编译它并尝试重新编译的。希望问题消失...
  • 类似的问题和答案已经在那里发布:stackoverflow.com/questions/7885246/…
  • 将org.deeplearning4j的版本从1.0.0-beta5升级到1.0.0-beta6后就ok了。

标签: gcc openmp dynamic-linking gcc4.7


【解决方案1】:

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

brew link --overwrite gcc

问题就解决了!

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

【讨论】:

    【解决方案2】:

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

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

    otool -L EXECUTABLE_OR_DYLIB
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 2012-04-12
      • 2012-08-30
      • 2011-12-21
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多