同一段代码,可以在xcode中编译或者在终端使用g ++,clang ++编译,不能用gcc或clang编译。为什么?

时间:2014-12-10 06:32:11

标签: c++ xcode macos gcc g++

我正在使用mac osx yosemite,xcode 6.1.1。 我写了这段简单的代码。当我编译并使用gcc链接它时,我不断收到错误: 找不到架构x86_64的符号

但是相同的代码在xcode中成功编译,或者使用g ++,clang ++编译。我想知道有什么区别? 该项目是一个包含以下内容的文件:

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <stdio.h>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

int main(int argc, char** argv){
    vector<ListNode *> vec;
    vec.push_back(new ListNode(0));
    vec.push_back(new ListNode(1));
    cout<<vec[0]->val<<vec[1]->val<<endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

如果使用g ++链接目标文件,它会自动链接到std C ++库(gcc不会这样做)。这就是为什么xcode,g ++和clang ++会编译你的代码但是gcc会抛出错误。

  

GCC:GNU编译器集合
   - 指GNU编译器支持的所有不同语言。

     
    

gcc:GNU C编译器
    g ++:GNU C ++编译器

  


gccg++之间的主要区别:

  1. gcc将分别编译*.c/*.cpp个文件作为C和C ++。
  2. g ++将编译:{{1​​}}文件,但它们都将被视为C ++文件。 此外,如果您使用g ++链接目标文件,它会自动链接到std C ++库(gcc不会这样做)。
  3. gcc编译C文件的预定义宏较少。
  4. gcc编译*.c/*.cpp和g ++编译*.cpp文件有一些额外的宏。