【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十三章 库的制作与使用

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更新目录。运行测试如下图所示:

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值