2017-04-24 87 views
0

一直试图在OSX 10.12上编译和运行一个简单的OpenMP程序(Hello World)。我使用brew安装了gcc 6。 我一直在使用'-fopenmp'标志来建造。 程序编译罚款,但是当我尝试执行程序中,我得到如下:OSX 10.12 GCC OpenMP错误

dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/opt/gcc/lib/gcc/6/libgomp.1.dylib (which was built for Mac OS X 10.12) 
    Expected in: /usr/lib/libSystem.B.dylib 

dyld: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/opt/gcc/lib/gcc/6/libgomp.1.dylib (which was built for Mac OS X 10.12) 
    Expected in: /usr/lib/libSystem.B.dylib 

Abort trap: 6 

任何想法?

+2

可能[什么是“\ _ \ _ _ _ emutls \ _get \ _address”符号?](http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol) – Siguza

+1

我认为你需要用'brew rm gcc'来删除'gcc',然后用'brew install gcc --without-multilib'重新安装。 –

+0

这方面的进展如何? –

回答

0

下面是我的iMac使用g ++运行的例子 - 6,编译如下:

g++-6 -std=c++11 -fopenmp -O3 demo.cpp -o demo 

运行如下:

./demo 
Time: 4.132ms, 1000000 elements. 

代码如下:

#include "omp.h" 
#include <iostream> 
#include <cmath> 
#include <cstdio> 
#include <chrono> 

int main() 
{ 
    const int size = 1000000; 
    int i; 
    double sinTable[size]; 
    std::chrono::time_point<std::chrono::high_resolution_clock> start = std::chrono::high_resolution_clock::now(); 

    #pragma omp parallel for 
    for(int n=0; n<size; ++n) 
     sinTable[n] = sqrt(std::sin(2 * M_PI * n/size)); 

    std::chrono::time_point<std::chrono::high_resolution_clock> end = std::chrono::high_resolution_clock::now(); 
    std::uint64_t duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count(); 
    float ms=duration/1000000.0; 
    std::cout << "Time: " << ms << "ms, " << size << " elements." << std::endl; 
} 
+0

由于某种原因,仍然出现完全相同的错误! – wanderKot

+0

因此,您卸载了** Xcode **,卸载了** g ++ **并重新安装了** Xcode **并重新安装了它的命令行工具并安装了** g ++ **以及'--without-multilib'选项并重新编译上面的代码,它仍然失败? –