GCC和G++的区别以及使用方法

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

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’
在这里插入图片描述
解决方案:

  1. 查看缺失的库文件(注意这里的库文件和头文件的区别)
    !这里用的是ubuntu系统。
$ man shm_open

在这里插入图片描述

  1. 使用gcc编译链接到已有的库
    在这里插入图片描述

参考资料

GCC在线文档

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caesarding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值