静态库和动态库

目录

一、概要

二、静态库

命名规则:

静态库制作:

静态库的使用:

命令:

重要说明:

使用:

三、动态库

命名规则:

动态库的制作:

动态库的使用:

方法一:配置LD_LIBRARY_PATH        库的绝对路径

1.在终端中配置

2.用户级别

3.系统级别

方法二:配置/etc/ld.so.cache 


一、概要

.c文件被打包成库,库需要分发给使用者。

main.c包含.h文件,调用.h文件中的接口;接口的定义在.c文件中,.c文件被打包成库。

main.c编译为可执行文件app,链接的过程需要头文件(.h)和库文件的信息——头文件的地址、库文件的名称和地址。

动态库和静态库的区别在链接阶段:gcc main.c -o app -I ./include -l calc -L ./lib

        静态库被打包到可执行程序中,可直接使用;

        动态库需要配置绝对路径,动态加载到内存中

二、静态库

命名规则:

Linux静态库命名规则:        libxxxx.a

windows静态库命名规则:   libxxxx.lib

 静态库制作:

首先,生成 .o文件:gcc -c add.c div.c mult.c sub.c

然后,生成静态库:ar rcs libcalc.a add.o sub.o mult.o div.o

静态库的使用: 

命令:

复制: cp -r calc/ library   ../lesson05                //复制文件夹,使用-r,递归复制

 cp ../calc/libcalc.a ./lib

返回上一级目录:  cd ..

删除所有 .o文件:  rm *.o

重要说明:

include:头文件

lib:库文件

src:源文件

head.h包含函数声明;src中是源文件,包含函数定义,源文件变成.o文件,然后被连接成libcalc.a库;所以head.h可以理解为库的使用说明

编译main.c为app,要包含头文件head.h和库文件

使用:

 

gcc main.c -o app -I ./include -l calc -L ./lib

说明:

gcc main.c -o app

-I(大写的i;头文件地址) ./include

-l(小写的l) calc(库的名称,不包含前缀后缀)

-L(库的地址) ./lib

执行文件:./app

三、动态库

命名规则:

Linux:libxxx.so

windows:libxxx.dll

动态库的制作:

lesson05$ cp -r calc library   ../lesson06

gcc -fpic生成位置无关的代码:calc$ gcc -c -fpic add.c div.c mult.c sub.c

gcc 得到动态库:                      calc$ gcc -shared add.o div.o mult.o sub.o -o libcalc.so

动态库的使用:

将动态库复制到library目录下:library$ cp ../calc/libcalc.so ./lib


 library$ gcc main.c -o main -I ./include -L ./lib -l calc 报错

方法一:配置LD_LIBRARY_PATH        库的绝对路径

1.在终端中配置

命令:

检查文件的动态库依赖关系:ldd main

命令:env        查看环境

命令:pwd  获取当前路径

插入路径:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chen/Linux/lesson06/library/lib

说明:

$获取当前路径

:在其后添加路径

=两边不能有空格

查看路径:

echo $LD_LIBRARY_PATH

ldd

 在终端中配置的路径是临时的

2.用户级别

步骤:

进入根目录 :cd

vim .bashrc        

shift+g  跳到最后一行

o 插入,插入内容:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chen/Linux/lesson06/library/lib

保存并退出

使更新生效:source .bashrc  或  . .bashrc


删除路径:vim ~/.bashrc        // ~/ 什么意思

编辑.bashrc,删除路径

使更新生效:source .bashrc

3.系统级别

sudo vim /etc/profile

其它操作与用户级别相同。

使更新生效:source /etc/profile

方法二:配置/etc/ld.so.cache 

ls /ll  + 文件路径

ls /etc/ld.so.cache

sudo vim /etc/ld.so.conf

将路径加入:/home/chen/Linux/lesson06/library/lib

完成

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值