#Linux系统编程(库的概念)

(一)发行版:Ubuntu16.04.7


(二)记录:

1.什么是库

库:一种可执行的二进制文件,是编译好的代码。

2.库的分类

静态库:在编译时会被链接到程序代码中。在程序运行不需要静态库,因为已经被链接进去了。编译出的内存占比较大。以lib开头,”.a“结尾。

动态库:在编译时不会被链接到程序代码中,在程序运行时载入。在程序运行时需要动态库。编译出的内存占比较小。以lib开头,以“.so”结尾。

3.静态库制作流程

(1)编写或准备库的源代码

#include <stdio.h>

void mylib(void);

void mylib(void)
{
printf("this is my lib\n");
}

(2)将源码.c文件编译为.o文件

(3)使用ar命令创建静态库

ar cr libMyLib.a MyLib.o
// c - create
// r - replace
//lib开头
//.a代表静态库

 

libMyLib.a         为库文件名

MyLib                为库名 

(4)测试库文件

a.编写一个testlib.c测试

#include <stdio.h>

void mylib(void);

void main()
{
 mylib();
}

b.编译

gcc testlib.c -lMyLib -L .
// -l为指定静态库名
// -L为指定静态库路径,接.即代表库在当前路径

 

 

4.动态库制作流程

(1)编写或准备库的源代码

(2)将源码.c文件编译生成.o文件

gcc -c -fpic mylib.c

//-fpic产生位置无关代码

(3)使用gcc命令创建动态库

gcc -shared -o libMyLib.so MyLib.o

//-shared 生成动态库

 

(4)测试库文件(a.out已经删除,重新生成·)

gcc testlib.c -lMyLib -L .

// -l指定动态库名
// -L指定动态库路径

此时生成的a.out不能直接运行,因为没有依赖库。有三种办法解决:

第一种:将生成的动态库拷贝到/lib或者/usr/lib里面去,因为系统会默认去这两个路径下寻找。

第二种:把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/samba/MyLib,我们就可以这样添加。这种方法只对当前终端有效(退出则失效)。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/MyLib

查看环境变量 

 

退出终端再进来打印已经失效

第三种:修改ubuntu下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态所在的位置,然后使用ldconfig更新目录。

vi /etc/ld.so.conf


(三)命令:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值