2012-11-16 26 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 

と文句を言い、この問題が解決を提案していることMWE

#include <stdio.h> 

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

注意を含め、-fopenmpでコンパイルされた任意のプログラム中に常に存在し、 What is the "___emutls_get_address" symbol?にあります。つまり、リンクフェーズで-lgcc_ehを追加しても機能しません(同じdyldエラーメッセージが表示されます)。

+0

奇妙なことに、私は[このガイド](http://solarianprogrammer.com/2012/07/21/compiling-gcc-4-7-1-html)に従って、最近OS X 10.8.2で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

私は全く同じ問題を抱えていました。私の場合は、/ usr/libにあったXCodeによってインストールされた古いバージョンのgccのライブラリ(どちらが覚えていないか)をリンクしたことが原因です。コンパイルに使用したバージョンの新しいgccライブラリ(/ usr/local)とリンクするように修正したとき、このエラーは修正されました。

だからあなたのビルドされた実行をチェックし、それが

otool -L EXECUTABLE_OR_DYLIB 

を使用してそして、あなたはそれ以上の年齢のgccのライブラリにリンク何かを見つけた場合にリンクされているすべてのライブラリ、それを修正します。

関連する問題