GNU和ICC编译器之间的区别:命令行警告#10370:选项'-std = c ++ 11'对C编译无效

时间:2017-09-11 15:54:46

标签: c++11 gcc intel

我很难使用intel编译器编译一些c ++代码,而GCC编译器可以毫无错误地完成工作。

考虑以下主要功能:

Main.cpp的

#include <iostream>
#include <stdlib.h>
#include <vector>
#include <stdio.h>
#include "my_func_data.h"
int main()
{   
    my_func_data dataFunction;
    dataFunction.vec.push_back(1);
    dataFunction.vec.push_back(2);
    dataFunction.vec.push_back(3);
    dataFunction.vec.push_back(4);

    for(int i=0;i<4;i++){
        printf("%f\n",dataFunction.vec[i]);
    }

 return 0;
 }

其中my_func_data.h是一个必须位于单独的头文件中的结构(为了演示该问题)。

#ifndef my_func_data_H_
#define my_func_data_H_

#include <stdio.h>
#include <stdlib.h>
#include <vector>

typedef struct 
{   
    std::vector<double>vec;
} 
my_func_data;
#endif 

现在我加载两个编译器并尝试使用每个编译器编译这两个函数。

第一次使用gnu编译器:

module load compiler/gnu-6.2.0
g++ -std=c++11 Main.cpp  my_func_data.h -o main
./main
1.000000
2.000000
3.000000
4.000000

接下来使用intel编译器

module load compiler/intel-15.0
icc -std=c++11 Main.cpp  my_func_data.h -o main
icc: command line warning #10370: option '-std=c++11' is not valid for C compilations
my_func_data.h(6): catastrophic error: cannot open source file "vector"
  #include <vector>
                   ^

什么可能阻止ICC编译器编译代码? 此外,我应该在主函数中嵌入结构my_func_data,它可以编译并执行。

提前感谢您的任何见解!

2 个答案:

答案 0 :(得分:3)

icc是C编译器。 C ++编译器是icpc

这类似于gccg++

答案 1 :(得分:0)

问题:

  1. -std=c++11不是有效的编译器选项。见the list of valid compiler options
  2. icc将.h文件视为C源文件,而不是C ++源文件。
  3. 您无需在命令行中使用my_func_data.h。只需使用:

    icc Main.cpp -o main