Отсутствует ___emutls_get_address с gcc-4.7 и openMP

Я пытаюсь скомпилировать программу, используя самокомпилированный GCC-4.7.1 в Mac OS 10.8.2. Программа использует 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).


person Marco Lombardi    schedule 16.11.2012    source источник
comment
Странно, недавно я скомпилировал GCC 4.7.1 на OS X 10.8.2 в соответствии с этого руководства и поддержка OpenMP работает безупречно.   -  person Hristo Iliev    schedule 16.11.2012
comment
@HristoIliev Я еще раз проверю, как я его скомпилировал, и попытаюсь перекомпилировать. Надеюсь проблема исчезнет...   -  person Marco Lombardi    schedule 16.11.2012
comment
Аналогичный вопрос и ответ были размещены там: символ"> stackoverflow.com/questions/7885246/   -  person FabienRohrer    schedule 30.01.2014
comment
После обновления версии org.deeplearning4j с 1.0.0-beta5 до 1.0.0-beta6 все в порядке.   -  person Oleksii Kyslytsyn    schedule 02.01.2020


Ответы (2)


У меня тоже была точно такая же проблема. И я новичок в openMP, и мои навыки не настолько хороши, чтобы использовать решение, предложенное Михалем Фапсо. Я решаю эту проблему, используя

brew link --overwrite gcc

и проблема решена!

Может быть, вы можете попробовать переустановить gcc на свой Mac.

person FL1NT    schedule 03.04.2019

У меня была точно такая же проблема. В моем случае это было вызвано линковкой библиотеки (не помню какой именно) более старой версии gcc, установленной XCode, которая находилась в /usr/lib. Когда я исправил его, чтобы связать с более новой библиотекой gcc той версии, которую я использовал для компиляции (в /usr/local), эта ошибка была исправлена.

Так что просто проверьте свой встроенный исполняемый файл и все библиотеки, с которыми он связан, используя

otool -L EXECUTABLE_OR_DYLIB

И если вы найдете что-нибудь, связанное с библиотекой старого gcc, исправьте это.

person Michal Fapso    schedule 13.05.2014