| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 【Linux学习笔记⑤】——GNU C语言开发环境【GNU make、静态库】 -> 正文阅读 |
|
[系统运维]【Linux学习笔记⑤】——GNU C语言开发环境【GNU make、静态库】 |
?? GNU ?? 上一篇文章链接: 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】. 一、GNU 概述??● GNU 的全称为 GNU’s Not Unix,这是官方的递归定义,永远找不到本义,是开源软件的幽默。 ??● GNU工程已经开发了一个被称为 “GNU”(GNU是“不是UNIX”的缩写)的、对 Unix 向上兼容的完整的自由软件系统 (free software system) 。由 Richard Stallman【自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者、著名黑客】完成的最初的 GNU 工程的文档被称为 ‘GNU宣言’,该宣言已经被翻译成多种其它语言。 ??● 你可以也可以不用为获取 GNU 软件而支付费用。不论是否免费,一旦你得到了软件,你在使用中就拥有三种特定的自由:
二、GNU C 编辑器??● GUN C 是在 Linux 系统下的 C语言。 2.1 目标代码的生成过程??● 用高级语言编写的代码必须经过编译和链接,最终生成可执行的目标代码。 ??① 首先,C/C++源代码会经过编译器,汇编源代码经过汇编器,生成目标文件( 2.2 GNU 概述??● GCC(GNU Compiler Collection)是 GNU 下编译器及其相关工具的集合。 ??● GCC 原名为 “ GNU C 语言编译器 ”,因为它原本只能处理 C 语言。但随着 GCC 的发展,在功能上得到了不断的扩充,现在它具有一下特点: 2.3 GNU C 编译链接工具——gcc??■ 语法: ??● 常用选项如下:
??● 例如:
2.4 GNU C 编译链接工具——as??■ 语法: ??● 常用选项如下:
??● 例如:
2.5 GNU C 编译链接工具——ld??■ 语法: ??● 例如:
三、项目管理工具——GNU make3.1 项目管理概述??● 在开发规模较大的应用项目时,常采用模块化设计方法,即将系统分解为若干个模块。各模块完成各自特定的功能。 ??● 此时,系统中存在多个源代码文件。当生成最终的可执行文件时,必须逐个编译这些源代码文件,并在最后将所有的目标代码链接为可执行程序…如果这些步骤都需要手工操作就很耗时间。 ??● 为此 GNU 项目开发了一个用于自动完成这些操作的项目管理工具 3.2 基于 make 工具的项目管理??■ Makefile文件的语法:
??◆ 说明:① 只有当所依赖的文件被更新时, ??■ make命令的语法: ???功能:创建指定的目标,如果没有指定目标,则创建第一个目标。 ??● 常用选项如下:
??● 样例如下:【首先编写一个 Makefile 文件,准备对其进行项目管理】
??● 然后我们对该脚本进行调用:
??● 然后,我们将得到各目标之间的依赖关系如下图所示:【当某个目标被修改时,则依赖它的所有上级目标(包括上级祖先等)都会被重新编译】
3.3 Makefile中的变量??● 为了使在 Makefile 中规则的书写更为简洁,也为了能适应不同的开发环境,可在定义 Makefile 定义变量,变量可用于保存文件名列表、命令和命令参数等。make 工具支持 4 种类型的变量:自定义变量、环境变量、预定义变量、自动变量。 3.3.1 自定义变量??● 这类变量有用户自定义,一般用大写字母表示。 ??■ 语法: ???功能:将 “字符串” 赋值给 “变量名”。注:在 Makefile 中无数据类型。 ??★调用: ??● 样例如下:【即把 3.2 的例子改写如下】
3.3.2 环境变量??● 3.3.3 预定义变量??●
??● 样例如下:【即可把 3.3.1 的例子改写如下】
3.3.4 自动变量??● 自动变量由
??● 样例如下:【即可把 3.3.3 的例子改写如下】
3.4 Makefile文件中的潜规则??● 通常为了产生目标文件,需要在目标文件和依赖对象之间建立明确的规则,定义如何生成目标的流程,但有时可简化这些操作。即用以下三种规则。 3.4.1 隐含规则??● GNU make 定义了内置的隐含规则,在不给出产生目标文件的命令时,由 ??● 样例如下:【即可把 3.3.4 的例子改写如下】
3.4.2 后缀规则??● 定义:将具有某后缀的文件(例如 ??● 样例如下:【即可把 3.4.1 的例子改写如下】
3.4.3 模式规则??● 模式规则是对具体规则的进一步抽象,定义了一类具有相同行为特点的规则,例如用 ??● 样例如下:【即可把 3.4.2 的例子改写如下】
四、创建和使用函数库??● 函数库:由若干目标文件按某种格式构成的集合,目标文件是由源文件经过编译生成的中间代码。在进行软件开发的过程中,往往会积累许多可复用代码。为了提高软件的开发效率,可将这些代码编译,并分类打包成函数库,供其他项目使用。 ??● 函数库可分为两类:静态库和共享库。它们俩在与应用程序的链接方式上具有不同的特点。 4.1 静态库??● 静态库由 ??● 静态库文件的命名规则是 4.1.1 静态库管理工具??■ 语法: ??● 常用的一些选项如下:
4.1.2 创建静态库??● 样例如下:【用两个 C 源文件创建静态库】 ??第一个命名为 “test_1.c” 的 C 语言源文件:
??第二个命名为 “test_2.c” 的 C 语言源文件:
??创建静态库的步骤如下:
??下面是使用
??利用静态库
??● 具体运行结果如下:
??● 静态库的特点: 4.2 共享库??● 经过编译后的应用程序在和共享库链接时,与静态库不同,没有将共享库中的目标对象嵌入至映像文件,而是只在生成的可执行映像文件时嵌入。因此,离开了共享库的支持,应用程序就无法运行。 ??● 共享库文件的命名规则是 ??● 共享库的创建、使用和加载和静态库类似,这里不在赘述。 ??● 注意:若在当前目录下同时存在
??● 共享库的特点: 4.3 动态链接库??● 动态链接库是运用共享库的一种方式,在运行的任何时刻都可以动态加载共享库。与一般使用的共享库不同,通常应用程序在启动时,不立即加载共享库,而是在需要时,动态加载共享库。在这种情况下,称共享库为动态链接库。( 五、参考附录:[1]《GNU/Linux编程》📚 [2]GNU和Unix的区别 上一篇文章链接: 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】. 下一篇文章链接: 🚧 🚧… ?? ?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/16 2:37:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |