嵌入式(十二)——库文件及静态库与动态库的制作与使用(附练习)

简介: 嵌入式(十二)——库文件及静态库与动态库的制作与使用(附练习)

前言


1.编译器gcc


静态库和动态库的制作与使用


2.调试器gdb


常用命令、调用内存错误


3.工程管理器make


makefile编写、多目录的makefile的编写


一、库文件


库文件:保存函数和变量,里面的函数和变量只能使用,但是看不到其实现

库函数(保存在库文件):printf scanf strcat

库文件的分类

静态库.a 保存的函数和变量,在编译阶段加载到可执行文件中

动态库.so 保存的函数和变量,在执行阶段加载到可执行文件中


使用静态库和动态库的区别(可执行文件的区别)

1.使用静态库编译出来的文件大小 > 使用动态库编译出来的可执行文件大小(影响:内存的开销)

2.使用静态库编译出来的执行文件速度 >(快于) 使用动态库编译出来的执行文件速度

3.使用静态库编译出来的执行文件升级 < 使用动态库编译出来的可执行文件升级

4.使用静态库编译出来的执行文件程序部署 > 使用动态库编译出来的可执行文件程序部署

库文件的存放路径:系统运行所需要的的库文件:/lib

第三方软件和工具运行所需要的的库:/usr/lib

编译时,编译器会自动到这两个目录里找所需要链接的库文件


1.1 制作静态库


1.将目标源文件编译成目标文件:gcc -c 目标源文件1 目标源文件2 (gcc -c add.c)

2.使用ar工具制作静态:ar -rcs(库不存在就创建,存在就更新)所要生成的库文件的名字(lib+库名+后缀.a) 目标文件

ar -rcs libadd.a add.o


1.2 使用静态库


-l:指定加载哪个静态库 -l库名(gcc demo.c -ladd)

-L:指定加载的库文件的存放路径(gcc demo.c -ladd -L/root/205/1107/)


1.3创建动态库


gcc -shared -fPIC -o 库名.so 源文件.c


1.4使用动态库


gcc 源文件.c ./库名.so -o 可执行文件名


0a2653c851af460fa595bd959398a8f1.png


练习


1.将add.c制作成静态库并使用

2.将sub.c add.c制作成libcal.a静态库并使用

3.按照图片,制作动态库


相关文章
|
4月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
142 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
8月前
|
Windows 计算机视觉 Linux
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
该文档介绍了Qt的跨平台特性,并推荐在Windows和Linux开发中使用QtCreator。在Windows下添加动态库,可以通过Visual Studio配置.lib文件和.dll文件,或在QtCreator中使用&quot;添加库&quot;功能。在QtCreator中,选择库文件、包含路径,并配置Details,然后更新.pro文件,清除、qmake及构建项目。运行时确保.dll与.exe在同一目录下。
240 0
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
|
9月前
|
开发工具 iOS开发
制作传统动态库和静态库遇到的问题
制作传统动态库和静态库遇到的问题
58 1
|
9月前
|
C++
[MFC] 动态链接库的制作过程和使用方法与总结
[MFC] 动态链接库的制作过程和使用方法与总结
155 0
|
程序员 vr&ar C语言
C/C++静态库和动态库的制作、使用、优缺点
C/C++静态库和动态库的制作、使用、优缺点
267 0
|
存储 Linux 编译器
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库(一)
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库
306 0
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库(一)
|
Linux Shell 编译器
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库(二)
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库
420 0
【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库(二)
|
Unix 编译器 Linux
嵌入式(十一)——gcc常用编译选项
嵌入式(十一)——gcc常用编译选项
312 0
嵌入式(十一)——gcc常用编译选项
|
C语言
嵌入式(十四)——Makefile编写及多级目录
嵌入式(十四)——Makefile编写及多级目录
519 0
嵌入式(十四)——Makefile编写及多级目录
|
Linux
Linux环境混合使用静态库与动态库
Linux环境混合使用静态库与动态库
183 0