gcc编译c++程序

时间:2022-11-14 05:35:34

原来一直以为gcc是c的linux下的编译器,g++是c++的linux下的编译器,今天偶尔看到一个说明文档,大体内容是gcc已经不单纯的可以编译C语言,它支持C, C++, Objective-C, Fortran, Java,  Ada的编译,如果不指名编译语言,默认由后缀名决定。感觉好神奇,就亲自想用gcc来编译一个c++的helloworld。步骤如下:

 

1.用vim直接打开hello.cpp,编译一个简单的hello world,用:wq命令保存,退出。

 

2.直接最简单的默认命令gcc hello.cpp, 哦,竟然报错 gcc: error trying to exec 'cc1plus' ...,我刚编译了一个c的程序,gcc编译器肯定能用的,难道gcc不能编译c++,不会哦,官方文档应该不会有错。于是上网搜了一下,说报错的原因是因为Ubuntu虽然默认安装了gcc编译器但是并没有安装所有的C语言的类库和工具,那就安装吧, 命令: sudo apt-get install build-essential 安装完成。

 

3.按向上键或者重新写一下 gcc hello.cpp,晕咯,这次报错报的更多,如下 /tmp/cc0jIPMU.o: In function `main':

 

hello.cpp:(.text+0x14): undefined reference to `std::cout'

hello.cpp:(.text+0x19): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

hello.cpp:(.text+0x21): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' ...

简直要晕死了,这次又Google,最后的解释是虽然gcc可以用来编译c++但是它不会自动的调用链接c++的库,你需要自己手动链接,使用如下命令: gcc -l stdc++ hello.cpp,顺利编译通过,使用./a.out查看,打印出hello world,成功。

 

4.最后说明一下用g++可以很方便的完成,完全是画蛇添足。