Linux——库

1.什么是库

认知1:库是写好的、现有的、可以复用代码。现实中每个程序都依赖很多基础的底层库,不可能每个人的代码都是从零开始。

静态库:.a[Linux]、.lib[windows]

动态库:.so[Linux]、.dll[windows]

认识几点

①:动静态库中不包含main函数

②:动静态库的本质都是源文件对应的.o

③:头文件.h是对方法的描述

2.静态库

2.1简单建立一个静态库

步骤

①:gcc -c *.c   将源文件转为目标文件(不包含有main函数的源文件)

②:ar -rc libMystr.a *.o  将目标文件转为静态库文件

:动静态库的命名都以lib开头,去掉lib和后缀即为库的名称

2.2将静态库进行链接

若头文件与执行代码同一个目录中

gcc -o excute excute.c -L. -l Mystr

说明

-L:去哪里找库   -L. 就是去当前路径中寻找库, -L ./lib/mylib 就是去该目录中寻找库

-l(link) Mystr: 与静态库(Mystr)链接

若头文件与执行代码不在同一个目录中

gcc -o excute excute.c -I/lib/include -L. -l Mystr

说明

-I:让系统在指定目录中寻找头文件

认知2:如果不把库和头文件下载(实际是拷贝)下来的话,每次调用都是这么麻烦,因此对于实际应用而言,要把头文件和库下载下来,对于linux系统而言,头文件是下载到/user/inluce/路径中,库文件下载到/lib64/,如下:

将自己的头文件拷贝到/user/include 中

sudo cp lib/include/* /user/inlcude/

将自己写的库文件拷贝到/lib64中

sudo cp lib/mylib/libMystr.a /lib64

注1:当完成上述拷贝后,不需要再像之前那样麻烦,但它形成的仍是一个第三方库,在执行可运行程序时,仍需要链接,如下:

gcc excute.c -Mystr

注2:gcc  g++ 默认认识C标准库,所以c标准库不需要链接,而自己写的系统不认识

2.3通过makefile简单实现一个静态库

以下代码不具备普遍性

libMystr.a:test.o                
    @ar -rc $@ $^
test.o:test.c
    @gcc -c $<

.PHONY:output
output:
    mkdir -p lib/include
    mkdir -p lib/mylib
    cp -f *.h lib/include
    cp -f *.a lib/mylib
    tar czf lib.tgz lib

.PhONY:clean
clean:
    @rm -rf *.o *.a lib lib.tgz

认知3:当我们有了上述认识后,就可以自己写一个函数.c(无main函数)和该函数的声明.h,通过ar -rc 生成一个静态库,并将其拷贝进lib/mylib,同时将声明.h拷贝进lib/include中,这样就简单实现了一个自己的静态库,别人写代码的时候,只要调用声明就能够使用这部分代码。

3.动态库

动态库的建立和链接和静态库类似,但是在链接的过程中会出现问题。

最后一步进行链接完成后,执行可执行程序 usercoed,会出现以下问题:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值