linux工具篇——gcc/g++

本文详细介绍了代码编译过程,包括预处理、编译、汇编和链接,重点讲解了gcc的具体编译步骤。讨论了动态库与静态库的区别,如链接方式、优缺点及如何验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.代码的编译过程

1.1预处理

1.2编译

1.3 汇编

1.4链接

2.gcc具体编译过程

2.1预处理

2.2编译

2.3汇编

2.4链接

3.动静态库

3.1库

3.2动态库

1.名字

2.链接方式

3.优点

4.缺点

3.3静态库

1.链接方式

2.优点

3.缺点

3.4代码验证


1.代码的编译过程

在学习gcc/g++之前我们先要了解代码的编译过程以及过程中具体发生过什么行为

1.1预处理

头文件展开  宏替换   去注释   条件编译

1.2编译

C 语言 -> 汇编语言

1.3 汇编

汇编语言  -> 可重定位二进制文件(现在的二进制文件不可以执行)

1.4链接

链接系统库形成可执行程序

2.gcc具体编译过程

gcc编译的过程也就对应了上面过程

2.1预处理

以code.c文件为例子

通过-E选项生成code.i文件

gcc -E code.c -o code.i

2.2编译

通过-S选项生成code.s文件

gcc -S code.i -o code.s

2.3汇编

通过-c选项生成code.o文件

gcc -c code.s -o code.o

2.4链接

最后链接不加选项生成可执行程序

gcc code.o -o code.exe

记忆技巧: 编译选项依次对应了键盘左上角的Esc键,形成的文件对应iso,其中只有Esc中的ES为大写其余为小写

3.动静态库

我们的可执行程序 = 我们的代码 + 头文件 + 库 

我们的 C 程序中,并没有定义 “printf” 的函数实现 , 且在预编译中包含的 “stdio.h” 中也只有该函数的声明 , 而 没有定义函数的实现, 那么 , 是在哪里实 “printf” 函数的呢 ?
最后的答案是 : 系统把这些 函数实现 都被做到名为 libc.so.6 库文件 中去

3.1库

ldd 指令查看依赖的库文件
其中对应的库就在 lib64/libc.so.6 路径下
动静态库 区别
.so -> 动态库       .a -> 静态库

3.2动态库

1.名字

去掉前缀后缀剩余的就是名字
这其实就是大名鼎鼎的 C标准库!!!

2.链接方式

所有程序以动态链接的方式和动态库关联起来
动态链接:库中所有的函数都有入口地址,所谓动态链接就是将库函数的 地址拷贝在可执行程序的特定位置!

3.优点

形成的可执行程序 体积小,节约资源

4.缺点

特别依赖动态库, 动态库没了,程序就无法运行

3.3静态库

静态库和上面一样的命名规则

1.链接方式

被程序将 代码拷贝到自己的可执行程序中(静态链接)

2.优点

可以 无视库的存在独立运行

3.缺点

体积太大,浪费资源

3.4代码验证

因为他们的链接方式不一样,所以他们的体积也不一样所以可以在 可执行文件的大小中体现出来
以不同的方式进行编译同一个文件大小差异很大,这还是在我代码量很少的情况下
就是因为他们的优缺点,所以系统一般 默认没有静态库
 所以需要安装
sudo yum install -y glibc-static  //c静态库
sudo yum install -y libstdc++-static //c++静态库

g++用法和gcc一样

 

### 下载 Popper.min.js 文件的方法 对于希望获取 `popper.min.js` 的开发者来说,可以通过多种方式来实现这一目标。通常情况下,推荐通过官方渠道或可靠的分发网络 (CDN) 来获得最新的稳定版文件。 #### 使用 CDN 获取 Popper.min.js 最简单的方式之一是从流行的 CDN 中加载所需的 JavaScript 库。这不仅简化了集成过程,还可能提高性能,因为许多用户已经缓存了来自这些服务提供商的内容。例如: ```html <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2/dist/umd/popper.min.js"></script> ``` 这种方式不需要手动下载文件到本地服务器;只需将上述 `<script>` 标签添加至 HTML 文档中的适当位置即可立即使用 Popper 功能[^1]。 #### 从 npm 或 yarn 安装 如果项目采用模块化构建工具链,则可以直接利用包管理器如 npm 或 Yarn 进行安装。命令如下所示: ```bash npm install @popperjs/core # 或者 yarn add @popperjs/core ``` 之后可以根据具体需求引入特定功能模块,而不是整个库,从而减少打包后的体积并优化加载速度[^2]。 #### 访问 GitHub 发布页面下载压缩包 另一种方法是访问 Popper.js 的 [GitHub Releases](https://github.com/popperjs/popper-core/releases) 页面,在这里可以选择不同版本的 tarball 或 zip 归档进行下载解压操作。这种方法适合那些偏好离线工作环境或是想要定制编译选项的人群[^3]。 #### 手动克隆仓库 最后一种较为少见但也可行的办法便是直接克隆完整的 Git 存储库副本。这样可以获得开发分支以及历史记录等更多信息,适用于贡献代码或者深入学习内部机制的情况。 ```bash git clone https://github.com/popperjs/popper-core.git cd popper-core ``` 完成以上任一途径后便能成功取得所需版本的 Popper.min.js 文件,并将其应用于个人项目之中[^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值