所以我只是从自制软件安装gcc,我有一个简单的代码:
#include <cmath>
#include <iostream>
#include <stdio.h>
int main()
{
const int size = 256;
double sinTable[size];
#pragma omp parallel for
for(int n=0; n<size; ++n)
sinTable[n] = std::sin(2 * M_PI * n / size);
#pragma omp parallel for
for(int n=0; n<10; ++n)
{
printf(" %d", n);
}
printf(".\n");
// the table is now initialized
}
Run Code Online (Sandbox Code Playgroud)
但是,当我编译时,我失败了:
dhcp-18-189-47-44:openmp_code myname$ gcc-4.8 tmp2.cpp
Undefined symbols for architecture x86_64:
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccFbBrPl.o
"std::ios_base::Init::~Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccFbBrPl.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改为g ++ - 4.8,那么它是成功的......
dhcp-18-189-47-44:openmp_code myname$ g++-4.8 tmp2.cpp -fopenmp
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样......
您正在使用'gcc'编译C++代码(为什么?),因此您需要将标准c ++库链接到它.添加-stdc++到构建命令.用g ++编译时,它知道自动链接到这个库.
#include <iostream>但你没有使用它.我认为(虽然没有检查)如果你注释掉这个包含,你的原始构建应该通过'gcc'.