2012-11-16 13 views
7

Mac OS 10.8.2'de kendi kendine derlenmiş GCC-4.7.1'i kullanarak bir program derlemeye çalışıyorum. Program openMP kullanır ve derleme başarılı olur; Ben program çalıştırmayı denediğinizde ancak, dinamik bağlayıcıgcc-4.7 ve openMP ile eksik ___emutls_get_address

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 

Bu sorun ile şikayet çözüm önerdi MWE

#include <stdio.h> 

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

Not dahil -fopenmp ile derlenmiş herhangi bir programda sürekli mevcut olduğu What is the "___emutls_get_address" symbol?, yani -lgcc_eh bağlantı aşamasında ekleme, işe yaramaz (yine aynı dyld hata iletisini alıyorum).

+0

Garip, son zamanlarda GCC 4.7.1'i [bu kılavuza] göre OS X 10.8.2'de derledim (http://solarianprogrammer.com/2012/07/21/compiling-gcc-4-7-1- mac-osx-lion /) ve OpenMP desteği kusursuz çalışır. –

+0

@HristoIliev Tekrar nasıl derlediğimi kontrol edip yeniden derlemeye çalışacağım. Umarım sorun ortadan kalkar ... –

+0

Benzer bir soru ve cevap burada yayınlanmıştır: http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol – FabienRohrer

cevap

1

Tam olarak aynı sorun vardı. Benim durumumda,/usr/lib içinde bulunan XCode tarafından kurulan gcc'nin eski bir sürümünün bir kütüphanesine (hangisini hatırlamıyorum) bağlamasından kaynaklandı. Derleme için kullandığım (g/usr/local) sürümün yeni gcc kitaplığına karşı düzeltmek için bu hata düzeltildi.

Dolayısıyla, sadece inşa yürütülebilir kontrol edin ve tüm kütüphaneler bu

otool -L EXECUTABLE_OR_DYLIB 

kullanarak bağlantılıdır Ve eski bir gcc'nin bir kütüphane ile bağlantılı bir şey bulursanız, bunu düzeltmek.