OSX 10.12 GCC OpenMP错误
问题描述:
一直试图在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
任何想法?
答
下面是我的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'选项并重新编译上面的代码,它仍然失败? –
可能[什么是“\ _ \ _ _ _ emutls \ _get \ _address”符号?](http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol) – Siguza
我认为你需要用'brew rm gcc'来删除'gcc',然后用'brew install gcc --without-multilib'重新安装。 –
这方面的进展如何? –