Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)

简介: Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)

快速认识一下

C语言推荐gcc

c++语言推荐g++

两者的差别不大主要

c++语言:

C语言

程序编译的过程

我们大概知道 C语言 ->汇编语言->二进制,

这个只是大概说明了先有语言再有编译器,由于各种原因,这些编译器可能就不是用这些语言来写的了

预处理

  1. 头文件展开
  2. 去注释
  3. 宏替换
  4. 条件编译
    我们知道在头文件进行写入条件编译主要就是防止头文件重复包含
    这个过程只是进行一系列操作,语言没有改变
gcc -E code.c -o code.i

编译

C语言翻译成汇编语言

gcc -S code.i -o code.s

汇编

汇编语言翻译成二进制

gcc -c code.s -o code.o

需要注意的是这个code.o文件不是可执行文件,不能执行

链接

gcc code.o -o code

执行code文件就可以了

./code

动静态标准库----链接

我们可以使用下面指令,可以查看code文件用到了哪些库

ldd code

Linux中的c标准库就是libc.so.6

不同的系统的库的后缀是不太一样的

在linux 系统下安装了C语言的头文件

ls /usr/include/

也安装了C标准库

ls /lib64/linc

如果平台要支持开发就要提前在系统中安装语言头文件库文件

简单的理解就是动静态库本身就是一个文件,头文件也是文件

这个图可以帮助我们理解动态库的使用,你是一名学生,你的作业就是执行代码,但是你需要上网才能完成作业,但是你不知道网吧地址,可是学长告诉你了,你就会去这个地方去上网,上完网后,你就会回来继续写作业,直到完成,

而静态库的就是我们链接的时候我们把需要用到的方法直接拷贝到可执行程序,不受静态库的影响,哪怕静态库出来问题也不影响可执行程序。

简单的理解就是允许我们拷贝的库就是静态库,允许我们链接的就是动态库


平时我们使用的函数也称为库函数

动态库

大致意思:在程序链接的时候只是作些标记(地址),然后在程序开始启动运行的时候,动态地加载所需库(模块)也是就通过地址找到对应的模块,

优点

  1. 节省资源(包括内存、网络…等资源),不会出现重复代码(只要没有重复,所有的花费都是必要的)


缺点:

  1. 对库的依赖性比较强,一旦库丢失,所有使用这个库的程序就会无法允许


例子:

gcc code.c -o code.out
ldd code.out
file code.out

静态库

大概:只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了

优点

  1. 不依赖库,同类型平台中都可以运行使用


缺点

  1. 可执行程序体积比较大,比较浪费资源


如果没有安装过静态库就会报错

ld就是链接器

我们需要先安装C语言静态库

sudo yum install glibc-static

c++的静态库就是

sudo yum install libstdc++-static

然后进行文件链接就可以了

gcc Newcode1.c -o newcode_static -static

可以看到我们使用ldd指令查看链接的库,可以发现,链接的是静态库

这个图也可以说明,同一个文件进行不同的链接,大小会改变,静态链接的可执行文件的大小更大

相关文章
|
4月前
|
Oracle Java 关系型数据库
入职必会-开发环境搭建41-Linux软件安装-安装JDK
本文介绍了在Linux系统中下载和安装JDK
148 3
入职必会-开发环境搭建41-Linux软件安装-安装JDK
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
3月前
|
Linux C语言
成功解决 在Linux CentOS 7 中安装gcc
这篇文章介绍了如何在Linux CentOS 7系统中安装gcc (g++) 8工具集。由于CentOS 7默认的gcc版本是4.8,而这个版本与Qt 5.14、Qt 5.15或更高版本不兼容,可能会导致编译时出现系统头文件错误。文章中提到,即使在项目配置中添加了`CONFIG+=c++11`,如果仍然报错,那么很可能是gcc版本的问题。为了解决这个问题,文章提供了使用CentOS的Software Collections (scl)来安装更新版本的gcc的步骤。
成功解决 在Linux CentOS 7 中安装gcc
|
2月前
|
Linux 编译器 C语言
Linux内核对GCC版本的检测
Linux内核对GCC版本的检测
|
4月前
|
应用服务中间件 Linux 网络安全
|
4月前
|
应用服务中间件 Linux 网络安全
|
4月前
|
缓存 监控 Linux
入职必会-开发环境搭建40-Linux常用操作-Linux进程管理
进程是正在执行的程序或命令。每个进程独立的,都有需要占用一定的系统资源。Linux系统中启动进程有两种方式:1.Linux操作系统启动的时自动启动的进程。2.用户在终端输入命令启动的进程。
入职必会-开发环境搭建40-Linux常用操作-Linux进程管理
|
4月前
|
NoSQL 前端开发 Linux
入职必会-开发环境搭建45-Linux软件安装-安装Redis
本文介绍了在Linux中3种安装Redis的方式和连接方式
|
4月前
|
关系型数据库 MySQL Linux
入职必会-开发环境搭建44-Linux软件安装-安装MySQL
在企业中MySQL 5.7和MySQL 8.x版本使用都较为广泛,因此本教程使用yum命令安装MySQL 5.7和MySQL 8.x到CentOS系统。 MySQL 5.7和MySQL 8.x版本大部分安装过程相同,仅有少部分配置不同,因此放在一起说明,请注意MySQL 5.7和MySQL 8.x的不同之处。
|
3月前
|
Java Linux 编译器
【Linux】gcc简介+编译过程
【Linux】gcc简介+编译过程