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

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

相关文章
|
2月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
27天前
|
Shell Linux 网络安全
Linux怎样在使用ssh 链接时就指定gcc 的版本
Linux怎样在使用ssh 链接时就指定gcc 的版本
23 7
|
26天前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
88 2
|
26天前
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
34 2
|
28天前
|
自然语言处理 安全 编译器
深入探索Linux下的luac命令:Lua编译器的奥秘
**探索Linux上的`luac`:Lua编译器详解** `luac`是Lua源代码的编译器,将`.lua`转换为字节码`.luac`,提升执行效率。它通过词法、语法分析生成可移植、安全的字节码。主要特点包括高效、可移植和安全。命令参数如`-l`列出字节码结构,`-o`指定输出,`-s`去除调试信息。使用示例:`luac -o script.luac script.lua`,然后用`lua script.luac`执行。注意版本兼容性,开发时保留调试信息,生产环境优化源代码并备份源文件。
|
17天前
|
NoSQL Linux 开发工具
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
|
21天前
|
Java 编译器 Linux
程序技术好文:详解Linux安装GCC方法
程序技术好文:详解Linux安装GCC方法
30 0
|
23天前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
22 0
|
28天前
|
Java Linux
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
28 0
|
1月前
|
NoSQL Linux 编译器
Linux基础——Linux开发工具(中)_gcc/g++
Linux基础——Linux开发工具(中)_gcc/g++
19 0