为什么我的简单编译会失败?

was*_*123 -2 c++ openmp

所以我只是从自制软件安装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)

我想知道为什么会这样......

Ale*_*op. 6

您正在使用'gcc'编译C++代码(为什么?),因此您需要将标准c ++库链接到它.添加-stdc++到构建命令.用g ++编译时,它知道自动链接到这个库.

  • 编辑 另一方面,您的代码与C++标准库没有任何关系.你有,#include <iostream>但你没有使用它.我认为(虽然没有检查)如果你注释掉这个包含,你的原始构建应该通过'gcc'.