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指令查看链接的库,可以发现,链接的是静态库

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

相关文章
|
6天前
|
JavaScript Java 应用服务中间件
linux开发环境搭建
搭建Java开发环境(1.8.0_131)、MySQL(8.0)安装与远程访问配置、Nginx反向代理设置和Node.js(v12.13.1)在Linux上的详细教程。包含环境变量配置、密码安全、 Navicat连接测试、Nginx配置文件修改及域名解析。如需相关项目开发支持,
|
6天前
|
Linux C语言
suse linux 11 安装GCC开发环境
suse linux 11 安装GCC开发环境
11 0
|
6天前
|
编译器 Linux C语言
Linux:编译器 - gcc
Linux:编译器 - gcc
12 4
|
6天前
|
IDE Linux 开发工具
【Linux】 开始使用 gcc 吧!!!
我们在windows环境和macos环境里都有功能强大的集成开发环境(IDE)供我们使用 ,但是在Linux中我们如何编译运行我们的代码呢?这里就需要使用gcc / g++ 了。
27 0
【Linux】 开始使用 gcc 吧!!!
|
6天前
|
编译器 Linux C语言
【Linux】编译器-gcc/g++
【Linux】编译器-gcc/g++
28 2
|
10月前
|
Linux 开发工具 数据安全/隐私保护
嵌入式Linux开发环境搭建之十---阿里云服务器购买及Linux开发环境搭建
嵌入式Linux开发环境搭建之十---阿里云服务器购买及Linux开发环境搭建
79 0
|
10月前
|
Ubuntu Linux 开发工具
嵌入式Linux开发环境搭建之四----Vim的安装
嵌入式Linux开发环境搭建之四----Vim的安装
65 0
|
10月前
|
Ubuntu Linux 虚拟化
嵌入式Linux开发环境搭建之一---VMware Ubuntu安装教程(亲自实践)
嵌入式Linux开发环境搭建之一---VMware Ubuntu安装教程(亲自实践)
225 0
|
8月前
|
Ubuntu Linux 虚拟化
嵌入式Linux系列第1篇:开发环境搭建
Ublox ZED-F9P 厘米级定位模组开箱评估
|
10月前
|
Ubuntu 网络协议 Linux
嵌入式Linux开发环境搭建之七---正确设置网络使开发板ping同Ubuntu(使用NAT方式,推荐)
嵌入式Linux开发环境搭建之七---正确设置网络使开发板ping同Ubuntu(使用NAT方式,推荐)
557 0