| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 在Linux系统(Ubuntu)下静态库与动态库文件的生成与使用 -> 正文阅读 |
|
[系统运维]在Linux系统(Ubuntu)下静态库与动态库文件的生成与使用 |
? 目录 一、Linux系统中函数库的类型函数库分为静态库和动态库。
二、hello实例使用库(一)、准备步骤1.创建一个作业目录test1,保存本次练习文件。
2.hello代码?,使用gedit文本编辑器生成hello.c,hello.h,main.c三个文件,三个文件源代码如下 程序一:hello.h文件
?程序二:hello.c?
程序三:main.c
3.将 hello.c 编译成.o 文件并观察是否编译成功?
?4.由.o 文件创建静态库并观察 创建静态库的工具:ar 静态库文件命名规范:以lib作为前缀,是.a文件
? (二)、静态库使用?1.含这些公用函数的原型声明,然后在用 gcc 命令生成目标文件时指明静态库名,gcc 将会从 静态库中将公用函数连接到目标文件中。注意,gcc 会在静态库名前加上前缀 lib,然后追 加扩展名.a 得到的静态库文件名来查找静态库文件。 方法一:
方法二:
?方法三: 先生成 main.o,再生成可执行文件
本次采用的是方法三,操作结果为:?? ?2.验证静态库是否生成成功 打开文件
删除静态库文件试试公用函数 hello 是否真的连接到
?3.通过观察发现程序照常运行,证明表明静态库跟程序执行没有联系以及静态库中的公用函数是在编译过程中直接被调用的。? ? ?(三)、动态库使用1.创建动态库
? ?2.在程序中使用动态库? 输入命令gcc main.c libmyhello.so -o hello 或?gcc -o hello main.c -L. -lmyhello
发现在显示文件时没有问题,但在./hello 会提示出错,因为虽然连接时用的是当前目录的动态库,但是运行时,是到 /usr/lib 中找库文件的,将文件 libmyhello.so 复制到目录/usr/lib 中就可以了。?
? ?发现无权限,此时我们可以用sudo命令解决
? (四)、静态库与动态库比较1.先删除除.c 和.h 外的所有文件,恢复成我们刚刚编辑完举例程序状态
2.再来创建静态库文件 libmyhello.a 和动态库文件 libmyhello.so?
3.运行 gcc 命令来使用函数库 myhello 生成目 标文件 hello,并运行程序 hello
?4.结果观察 ?发现在执行可执行文件,会报一个错误,可见当静态库和动态库同时存在的时候,程序会优先使用动态库。 三、静态库实例(一)、构建新文件夹,编写程序A1.c
A2.c
A.h
test.c
?程序构建如下:? ? (二)、静态库.a 文件的生成与使用1.生成目标文件
?2.生成静态库.a 文件
?3.使用.a 库文件,创建可执行程序(若采用此种方式,需保证生成的.a 文件与.c 文件保 存在同一目录下,即都在当前目录下)
(三)、共享库.so 文件的生成与使用1.生成目标文件(xxx.o)(此处生成.o 文件必须添加"-fpic"(小模式,代码少),否则在生成.so 文件时会出错)
?2.生成共享库.so 文件
?3.使用.so 库文件,创建可执行程序
?
? ? 四、动态库实例
(一)、程序编写??程序一:lcx.c
程序二:lcy.c
?程序三:lc.h
程序四:main.c
?代码运行如下: ? (二)、用gcc分别编译为3个.o 目标文件?
? ? (三)、将目标文件生成静态.a文件
代码运行如下: ? ? (四)、观察文件大小
? ? (五)、将目标文件生成动态库.so文件并与main函数链接
?代码运行如下: ? (六)、记录大小并与静态库对比动态库: ?静态库: ?对比可知,静态库占用空间更少。 ? ? 五、实验总结? ? ? ?通过本次实验,使我初次了解并熟悉了静态库和动态库的相关知识,使我能够自主的生成静态库和动态库,进一步理解二者之间的差别。同时通过本次实验,加强了我对?Linux系统的运行操作,加强了对gcc等相关编译工具的运用。 ? 六、参考文献 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/15 18:23:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |