2012-11-16 139 views
7

我想在Mac OS 10.8.2上使用自編譯的GCC-4.7.1來編譯程序。該程序使用openMP,編譯成功;然而,當我嘗試運行該程序,動態連接器與使用gcc-4.7和openMP缺少___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 

這個問題抱怨與-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錯誤信息)。

+0

奇怪的是,我根據[本指南]在OS X 10.8.2上最近編譯了GCC 4.7.1(http://solarianprogrammer.com/2012/07/21/compiling-gcc-4-7-1- mac-osx-lion /),OpenMP支持完美無瑕。 –

+0

@HristoIliev我會再次檢查我如何編譯它並嘗試重新編譯。希望問題消失... –

+0

類似的問題和答案已張貼在那裏: http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol – FabienRohrer

回答

1

我有完全相同的問題。在我的情況下,它是由與XCode安裝的gcc的舊版本(位於/ usr/lib中)庫(我不記得是哪一個)進行鏈接而引起的。當我將其更正爲與用於編譯的版本(位於/ usr/local)中的新版gcc庫鏈接時,此錯誤已修復。

所以只是檢查你生成的可執行文件和所有的庫是用

otool -L EXECUTABLE_OR_DYLIB 

相連,如果你發現任何與舊GCC的庫鏈接,解決這個問題。