i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、
【公众号】迅为电子
【粉丝群】258811263(加群获取驱动文档+例程)
第三十三章 库的制作与使用
本章内容对应视频讲解链接(在线观看):
库的基本概念 → https://www.bilibili.com/video/BV1zV411e7Cy?p=14
静态库的制作与使用 → https://www.bilibili.com/video/BV1zV411e7Cy?p=15
动态库的制作与使用 → https://www.bilibili.com/video/BV1zV411e7Cy?p=16
库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在Linux下有静态库和动态库。因此编译出来的体积就比较大。
静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以lib开头,以.a结尾
动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候被载入的。所以程序在运行的时候需要动态库了。因此编译出来的体积就比较小。以lib开头,以.so结尾。
静态库的制作步骤:
1 编写或准备库的源代码
2 将源码.c文件编译生成.o文件
3 使用ar命令创建静态库
4 测试库文件
举例:
libmylib.a:库文件名
mylib:库名
动态库制作步骤:
1 编写或准备库的源代码
2 将源码.c文件编译生成.o文件
3 使用gcc命令创建动态库
4 测试库文件
举例:gcc test.c -lmylib -L
-l:指定动态库的库名
-L:指定动态库的查找位置。-L . 表示在当前目录下去查找
实验:静态库的制作
代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\12”目录下。
新建mylib.c文件,编辑内容如下所示:
#include<stdio.h>
void mylib(void);
void mylib(void)
{printf("This is mylib\n");
}
我们在Ubuntu编译,如下图所示:
编写测试代码test.c,编辑内容如下所示
#include <stdio.h>
void mylib(void);
int main(void)
{mylib();return 0;
}
编译测试文件test.c,如下图所示:
运行测试a.out,如下图所示:
实验:动态库的制作
代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\13”目录下。
新建mylib.c文件,编辑内容如下所示:
#include<stdio.h>
void mylib(void);
void mylib(void)
{printf("This is mylib\n");
}
我们在Ubuntu编译,如下图所示:
编写测试代码test.c,编辑内容如下所示:
#include <stdio.h>
void mylib(void);
int main(void)
{mylib();return 0;
}
编译测试文件test.c,如下图所示:
运行测试a.out,如下图所示:
在动态库使用是,系统会默认去/lib,/usr/lib目录下去查找动态函数库,如果我们使用的库不在里面,就会提示错误。解决这个问题有三种方法。
第一种方法:
将生成的动态库拷贝到/lib或者/usr/lib里面去,因为系统会默认去这两个路径下寻找。
第二种方法:
把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样添加,但是这种方法只在当前设置的窗口有效。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/linux/13
我们加入环境后,运行a.out,如下图所示:
第三种方法:
修改ubuntu下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态库所在的位置,然后使用命令ldconfig更新目录。
我们输入以下命令编辑/etc/ld.so.conf文件,如下图所示:
文件内容为:
修改完文件保存退出,输入ldconfig更新目录。运行测试如下图所示: