C++源文件通常使用后缀“.c",".cc",",cpp",".c++",".cp",".cxx";C++头文件经常使用".hh",".hpp”,".h"或者(对于共享模板)".tcc"和预处理对的C++文件使用后缀“.ii"
即使您以与编译C程序相同的方式调用编译器,GCC也会识别具有这些名称的文件并将其编译未C++程序。
但是,使用gcc不会添加C++库。g++是一个调用GCC并自动针对C++库的链接的程序。他对待 .c,.h,和.i 文件作为C++源文件而不是C源文件,除非-x来用。
介绍
GCC代表“ GNU编译器集合”。GCC是几种主要编程语言的编译器的集成发行版。这些语言当前包括C,C ++,Objective-C,Objective-C ++,Fortran,Ada,D,Go和BRIG(HSAIL)。
缩写GCC具有常用的多种含义。当前的正式含义是“ GNU编译器集合”,通常指完整的工具套件。该名称在历史上代表“ GNU C编译器”,当强调编译C程序时,这种用法仍然很常见。
除C之外的大多数语言的编译器都有自己的名称。C ++编译器是G ++,Ada编译器是GNAT,依此类推。当我们谈论编译这些语言中的一种时,我们可能会使用自己的名称或GCC来引用该编译器。两者都是正确的。
所以不难理解,g++是gcc中用来编译c++的编译器。
控制输出种类的选项
编译最多可涉及四个阶段:预处理,适当的编译,组装和链接,始终按照该顺序进行。GCC能够将多个文件预处理并编译为多个汇编程序输入文件或一个汇编程序输入文件;然后,每个汇编程序输入文件都会生成一个目标文件,并将所有目标文件(新编译的和指定为输入的那些目标文件)的链接合并到一个可执行文件中。
对于任何给定的输入文件,文件名后缀确定完成哪种编译:
- file.c 必须预处理对的c源代码
- file.h 头文件
- file.cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C
必须预处理的C ++源代码。请注意’.cxx’,最后两个字母都必须在字面上是’x’。同样,“.C’表示字面大写字母C - file.hh
file.H
file.hp
file.hxx
file.hpp
file.HPP
file.h++
file.tcc
将C ++头文件转换为预编译的头或Ada规范。 - file.s 汇编代码。
- file.o 目标文件(可执行文件)
- file.a
file.so
file.sa
库文件
常用的选项
- -x language
明确指定以下输入文件的语言(而不是让编译器根据文件名后缀选择默认语言)。此选项适用于所有后续输入文件,直到下一个-X选项。语言的可能值为:
c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
d
f77 f77-cpp-input f95 f95-cpp-input
go
brig
- -c 编译或汇编源文件,但不链接。
- -o file 将输出放在文件file中。这适用于生成的任何类型的输出,无论是可执行文件,目标文件,汇编文件还是预处理的C代码。
编译运行
编译过程

简单的编译运行
- 编译:
gcc src_file -o exec_file -lpthread
- 运行:
./exec_file
使用GCC的-l选项链接到已有的库
未链接库出现的问题
undefined reference to `shm_open’ 等

解决方案:
- 查看缺失的库文件(注意这里的库文件和头文件的区别)
!这里用的是ubuntu系统。
$ man shm_open

- 使用gcc编译链接到已有的库

本文详细介绍了C++源文件和头文件的后缀名,以及如何使用GCC和G++编译C++程序。解释了GCC的多种含义及其集成的编程语言编译器,包括C++编译器G++的具体用途。同时,文章还提供了控制输出种类的选项说明,以及常见的编译运行示例。
711

被折叠的 条评论
为什么被折叠?



