2017-09-11 31 views
2

我很難用intel編譯器編譯一些C++代碼,而GCC編譯器可以毫無錯誤地完成工作GNU和ICC編譯器之間的區別:命令行警告#10370:選項'-std = C++ 11'對於C編譯無效

考慮以下主要功能:

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 

現在我加載兩個編譯器,並嘗試使用每個編譯器來編譯這兩個函數。

1日使用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 

下一頁使用英特爾編譯器

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

你看過[icc選項](https://software.intel.com/sites/default/files/m/d/4/1/d/8/icc.txt)嗎? –

+0

謝謝你的回答! '-std = C++ 11'(我知道這是唯一的選擇)並不是一個問題。就在我將my_func_data編譯爲獨立頭文件的那一刻,編譯器會發出一個警告,指出它正在編譯一個c代碼,然後向向量拋出一個錯誤。我誤解你的評論嗎?請告訴我。 – user2518768

回答

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 
    
3

icc是C編譯器。 C++編譯器是icpc

這與gccg++相似。