| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【Linux初阶】Linux编译器-gcc/g++使用 | gcc/g++入门 | 动静态库&动静态链接 | Linux下的C/C++静态库安装 -> 正文阅读 |
|
[C++知识库]【Linux初阶】Linux编译器-gcc/g++使用 | gcc/g++入门 | 动静态库&动静态链接 | Linux下的C/C++静态库安装 |
目录 3.汇编(生成机器可识别代码 - 把汇编变成二进制目标文件) 一、背景知识我们先来回顾一下程序的翻译过程:
Linux下程序的执行 在Linux中,文件经过gcc编译会生成一个执行文件(默认生成a.out,可使用 gcc 编译文件?-o + 目标文件名生成),我们可以用以下方法运行可执行文件
示例: Linux下程序的删除 删除可执行程序 a.out
二、gcc编译过程格式 gcc [选项] 要编译的文件 [选项] [目标文件] 1.预处理(头文件展开、去注释、宏替换、条件编译)预处理功能:主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。即生成预处理文件后,以#号开头的指令是预处理指令。 生成预处理文件:
2.编译(生成汇编)在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
3.汇编(生成机器可识别代码 - 把汇编变成二进制目标文件)汇编阶段是把编译阶段生成的“.s”文件转成目标文件 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
4.连接(生成可执行文件或库文件)?在成功编译之后,就进入了链接阶段。
三、函数库 & 链接方式函数库
动态库:libXXXXX.so 静态库:libYYYYY.a
【注意】函数库分为静态库和动态库 静态库和动态库静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。 gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc test.o –o test gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证 ?? 静态链接和动态链接静态链接:在程序内部,拷贝一份运行需要的库函数(形成静态库),直接使用;
动态链接:通过编译器、链接器对库进行连接,间接使用库运行程序(调用动态库);
静态库安装C语言静态库安装
验证 :形成静态库可执行程序
?我们可以看到,statically linked - 静态链接 出现 C++静态库安装
验证方法同上?
Linux和windows链接原理在Linux下系统为了支持我们编程,为我们提供了 标准库.h ,标准的动静态库 .so/.a
在windows下
🌹🌹gcc/g++工具的知识大概就讲到这里啦,博主后续会继续更新更多Linux操作系统的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 5:12:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |