迅为嵌入式Linux学习笔记3——库的制作

库的制作

库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。

库的种类

Linux下库分为两种,静态库和动态库。

  • 静态库:静态库在程序编译的时候会被连接到目标代码里面,所以程序运行的时候就不需要该静态库了。因此编译出来的程序体积就比较大。静态库以lib开头,以.a结尾。
  • 动态库:(动态库也叫共享库)动态库在程序编译的时候不会被连接到代码里面,而是在程序运行的时候被载入的,所以程序运行的时候就需要该动态库。因此使用动态库编译出来的程序体积就比较小。动态库以lib开头,以.so结尾。

静态库的制作

静态库的制作步骤

  1. 编写或准备库的源代码
  2. 将源码.c文件编译生成.o文件
  3. 使用ar命令创建静态库
  4. 测试库文件
  • 创建 mylib.c 文件
#include <stdio.h>

void mylib(void);

void mylib(void)
{
	printf("This is mylib\n");
}
  • 编译
gcc -c mylib.c
  • 使用ar命令创建库文件
ar cr libmylib.a mylib.o

参数说明:

c: 创建
r: 覆盖

知识点:

libmylib.a: 库文件名
mylib: 库名

  • 编写测试代码,创建test.c
#include <stdio.h>

void mylib(void);

int main(void)
{
	mylib();
	return 0;
}
  • 编译
gcc test.c -lmylib -L.

参数说明:

-l 后面跟库名
-L 后面跟库路径,当前路径为 “.”

动态库的制作

动态库的制作步骤

  1. 编写或准备库的源代码
  2. 将源码.c文件编译成.o文件
  3. 使用gcc命令创建动态库
  4. 测试库文件
  • 将源码.c文件编译成.o文件
gcc -c -fpic mylib.c

参数说明:

-c 输出.o文件
-fpic 产生位置无关代码(动态库可以被多个目标代码加载,每个目标代码的地址都是不一样的,所以需要加 -fpic)

  • 使用gcc命令创建动态库
gcc -shared -o libmylib.so mylib.o

参数说明:

-shared 生成动态库
-o 指定库文件名

  • 编译test.c
gcc test.c -lmylib -L .

如果我们的程序代码用到了库文件里面的函数,我们在编译的时候需要链接库。系统默认会在/lib或者/usr/lib去找库文件。或者在编译的时候我们指定库的路径。

在动态库使用时,系统会默认去/lib,/usr/lib目录下去找动态函数库,如果我们使用的库不在里面,就会提示错误。解决这个问题有三种方法。

第一种方法:

将生成的动态库拷贝到/lib或者/usr/lib里面去,因为系统会默认去这两个路径下寻找。(自己生成的库,不建议这么加)

第二种方法:

把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样加。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test

此方法只对当前终端有效。

第三种方法:

修改ubuntu下的配置文件/etc/ld.so.conf,我们在这个配置文件里面假如动态库所在的位置,然后使用命令ldconfig更新目录。(该命令在/sbin目录下)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值