IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 一些关于C语言的“基础”(一)——编译 -> 正文阅读

[C++知识库]一些关于C语言的“基础”(一)——编译

大多数人学习C/C++都是从语法什么的开始学习,只学习如何写代码(我最开始也是),但是时间长了之后会发现,对于一些相对底层的实现一无所知,甚至有一些在我看来比较常识性的问题也一知半解。其实很大程度上是因为,像我这种是没有系统学习过计算机的,一些本应该并行的基础课没有上,所以,这个系列,单独讲一讲我所遇到的,以及我认为会遇到的关于C的“基础概念”

C程序编译步骤

C程序的编译四步

C代码编译成可执行程序经过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

gcc编译过程

上面的四步很多人都没有什么概念,非计算机专业可能只记得编译和链接,下面通过gcc来演示一下每个过程是做什么的。关于gcc的安装,看这里喽

分步编译

预处理:gcc -E hello.c -o hello.i // 只进行预处理
编  译:gcc -S hello.i -o hello.s // 只进行预处理和编译
汇  编:gcc -c hello.s -o hello.o // 只进行预处理、编译和汇编
链  接:gcc    hello.o -o hello   // 指定生成的输出文件名为 file
// 后缀
// .c	C 语言文件
// .i	预处理后的 C 语言文件
// .s	编译后的汇编文件
// .o	编译后的目标文件

下面来演示一下这个过程
首先选择一个c文件
在这里插入图片描述

  1. 预处理 gcc -E 01.c -o 01.i
    在这里插入图片描述
    成功后我们会得到一个.i文件,我们先来看一下原始的.c文件,先不管它实现的功能,看长度他只有47行
    在这里插入图片描述
    但是.i文件有上千行,宏定义、头文件都被展开了,而且可以看到注释掉的代码被删除了
    在这里插入图片描述
  2. 编译 gcc -S 01.i -o 01.s
    在这里插入图片描述
    现在我们得到了一个.s文件,同样用记事本打开,熟悉汇编的会看到,这里有很多汇编的指令
    在这里插入图片描述
  3. 汇编 gcc -c 01.s -o 01.o
    在这里插入图片描述
    打开.o文件,嗯,现在你什么都看不懂了,因为现在是一堆二进制,但是现在我们可以执行了
    在这里插入图片描述
  4. 执行 gcc 01.o -o 01_elf
    生成可执行文件
    在这里插入图片描述
    执行 01_elf
    在这里插入图片描述

一步编译

gcc 01.c -o demo(还是经过:预处理、编译、汇编、链接的过程)
在这里插入图片描述
这样我们会直接得到一个exe直接执行就好,但是注意这种“非法的”exe很容易被杀毒软件干掉(杀毒软件太灵敏也很无奈,白名单都没有,有的时候只能关掉了)
在这里插入图片描述

查找程序所依赖的动态库

说实话,我觉得这个功能真的不要太有用,之后你会遇到很多库,当他因为库连接不上报错的时候,这个真的真的好用
Windows平台下,我们需要安装相应软件(Depends.exe),来实现这一功能。depends是一款可以查看一个exe文件或dll文件需要依赖哪些dll文件的工具,比如我们生产了一个exe程序,显然在我们的开发环境下是可以执行这个exe程序的,但是换一个环境就不见得了,有的时候我们需要安装库来支持代码的实现,但是突然报错不识别函数,基本就是某一个库没有链接上了,所以我们需要知道这个exe程序都依赖哪些动态链接库,以保证程序离开了开发环境还可以正常运行。
这个下载很方便,不用安装直接解压就能用,[官网在这里],(http://www.dependencywalker.com/)
解压之后直接点击exe就行,在应用里面选择相应的exe文件,但是不知道为什么,我每次打开都很卡,唉。后来看到这篇文件,简直提速不知一百倍,推荐给大家
在这里插入图片描述
包括一些报错x64,x86不兼容的问题,dll版本不对的问题都可以用这里软件来查找解决

暂定下一篇讲内存,关于作用域和内存分区,flag立着里,看我什么时候来兑现吧

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:29:00  更:2021-09-22 14:29:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:56:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码