2012-11-16 34 views
7

Próbuję skompilować program przy użyciu samodzielnie skompilowanego GCC-4.7.1 na Mac OS 10.8.2. Program korzysta z OpenMP i kompilacja się powiedzie; Jednak, gdy próbuję uruchomić program, dynamiczny linker narzekaBrakuje ___emutls_get_address z gcc-4.7 i 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 

kwestia ta jest stale obecny w dowolnym programie skompilowany z -fopenmp, w tym MWE

#include <stdio.h> 

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

Uwaga że rozwiązaniem sugerowanym w What is the "___emutls_get_address" symbol?, a mianowicie dodanie -lgcc_eh w fazie łączenia, nie działa (nadal otrzymuję ten sam komunikat o błędzie dyld).

+0

Dziwne, ostatnio skompilowałem GCC 4.7.1 na OS X 10.8.2 zgodnie z [ten przewodnik] (http://solarianprogrammer.com/2012/07/21/compiling-gcc-4-7-1- mac-osx-lion /) i wsparcie OpenMP działa bezbłędnie. –

+0

@HristoIliev Sprawdzę jeszcze raz, jak go skompilowałem i spróbuję przekompilować. Mam nadzieję, że problem zniknie ... –

+0

Podobne pytanie i odpowiedź zostały tam opublikowane: http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol – FabienRohrer

Odpowiedz

1

Miałem dokładnie ten sam problem. W moim przypadku było to spowodowane połączeniem z biblioteką (nie pamiętam, która) starszej wersji gcc zainstalowanej przez XCode, która była w/usr/lib. Kiedy poprawiłem link do nowszej biblioteki gcc wersji, której użyłem do kompilacji (w/usr/local) ten błąd został naprawiony.

Więc po prostu sprawdzić zbudowany wykonywalny i wszystkie biblioteki jest ona związana z użyciem

otool -L EXECUTABLE_OR_DYLIB 

A jeśli znajdziesz coś związanego z biblioteką starszej gcc, naprawić.