Linux编译器--gcc/g++的使用

本文介绍了gcc和g++的区别,它们在Linux中的作用以及如何区分和安装。重点讲述了程序的翻译过程,包括链接的概念、动态库和静态库的特点,以及ldd工具的应用。
摘要由CSDN通过智能技术生成

目录

1. gcc与g++

2.程序的翻译过程 


1. gcc与g++

gcc与g++分别是c语言与c++代码的编译器,但同时g++也兼容c语言。

我们知道在Linux中,系统并不以文件后缀来区分文件类别。但对于gcc与g++等编译器而言却是需要的。Linux中c代码文件的后缀是.c,c++代码文件的后缀是.cpp(.cc)(.cxx)。

在Linux中,我们可以借助如下命令查询gcc/g++的版本

gcc --version

g++ --version

如果我们查询失败,显示系统中没有gcc/g++,那么我们可以借助yum工具来进行安装。

yum -y install gcc

yum -y install gcc-c++

这里要注意,gcc只能编译c语言代码,而g++同时兼容c/c++。-o选项可以指定生成可执行文件的名字。

实例:

2.程序的翻译过程 

一张图表示程序的翻译过程

在上图中,其他的都很好理解,那么链接是谁和谁链接呢?

链接是我们的程序同库之间链接的过程,ldd+可执行程序名,就可以查看程序依赖的库。

怎么做的?

在Linux系统中,分为两种库,动态库:.so  静态库:.a(动态链接,静态链接)

静态链接
特点:在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码都包含到可执行文件中去。因此,链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数,这样链接器才能知道是不是每个目标文件所需要的函数都能正确地链接。如果某个目标文件需要的函数在参与链接的目标文件中找不到的话,链接器就报错了。目标文件中有两个重要的接口来提供这些信息:一个是符号表,另外一个是重定位表。
优点:在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行。
缺点:程序体积会相对大一些。
如果静态库有更新的话,所有可执行文件都得重新链接才能用上新的静态库。
动态链接
特点: 在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。
优点: 多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝。
缺点: 由于是运行时加载,可能会影响程序的前期执行性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值