linux 静态库 动态库制作与使用

本文介绍了Linux环境下静态库和动态库的编程实践,包括它们的制作、使用方法及优缺点。通过实例展示了如何创建静态库(.a)和动态库(.so),并解释了如何在编译时指定库路径和链接方式。同时,讨论了静态链接与动态链接的区别,以及在不同库路径下如何正确链接和运行程序。
摘要由CSDN通过智能技术生成

Linux库概念及相关编程

1. 分文件编程案例

好处:
分模块的编程思想
网络 a
超声波b
电机c
a.功能责任划分
b.方便调试
c.主程序简洁

2. 库

链接: link.

链接: link.

a) 静态库
静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ;
优点: 运行快
发布程序无需提供静态库,因为已经在app中,移植方便
缺点:大

b) 动态库
动态函数库,是在程序执行时动态(临时)由目标程序去调用
缺点: 运行慢
优点: 小

3. 库的制作

静态库的制作:格式xxxx.a
a. gcc calcufuncs.c -c 生成xxx.o文件
b. ar rcs libcalcufunc.a calcufuncs.o xxx.o文件生成xxx.a静态库文件

动态库的制作:
a. gcc -shared -fpic calcufuncs.c -o libcalc.so
-shared 指定生成动态库
-fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码

4. 库的使用

静态库:
gcc calculatorT.c -lcalcufunc -L ./ -o mainProStatic
-lcalcufunc -l是制定要用的动态库,库名砍头去尾
-L告诉gcc编译器从-L制定的路径去找静态库。默认是从/usr/lib /usr/local/lib去找

gcc calculatorT.c -lcalc -L ./ -o mainProDy
libcalc.so

引用动态库,怎么指定动态库的位置
链接: link.
链接: link.

带动态库的程序,
可以指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件
export LD_LIBRARY_PATH=“/home/pi/back/test”

5. 添加shell脚本执行程序

新建一个 .sh 文件,里面写入:
export LD_LIBRARY_PATH=“/home/pi/back/test”

./app(可执行文件)
然后给 .sh 文件添加可执行命令:chmod +x .sh
运行程序:./.sh

6. 静态库,动态库的使用

如果静态库和动态库在不同的路径之下:
libA.a在path1,libB.so在path2
gcc main.c -o main -L path1 -lA -lB -Wl,-rpath=path2

如果静态库和动态库在同一路径之下:
libA.a和libB.so都在path1
gcc main.c -o main -L path1 -lA -lB -Wl,-rpath=path1

如果同一个库名存在动态库和静态库:
libA.a和libA.so,libB都在path1
linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。也可以指定链接静态库还是动态库。
gcc main.c -o main -L path1 -Wl,-Bstatic -lA -Wl,-Bdynamic -lB -Wl,-rpath=path1
链接: 强制动态链接和静态链接.
链接: Gcc同时使用静态库和动态库.

note: 链接阶段查找库的位置和运行时查找库的位置是两码事。
-L 指定编译过程链接库的路径,包括了动态库和静态库。
(-Wl,-rpath=path1),指定程序运行过程链接库的路径,一般是指动态库。
链接: gcc / -L 和 -Wl,-rpath 区别.
-l 指定链接库的名字(去了lib头,.a或者.so尾),这个参数只有在-L的前提下才能使用,没有-L参数的话,它就识别不了。

7. 静态库,动态库,静态链接,动态链接

静态链接和动态链接是指链接系统运行库的方式(如/lib,/usr/lib目录下的系统库)。
在制作静态库时,它并没有链接运行库,而是在编译生成运行程序的时候进行链接,因此需要指定链接用到的库。
而制作动态库,它是一个二进制文件,过程中需要链接运行库,在编译运行程序时,直接调用这个动态库就行,不需要指定其他库。
具体参考:
链接: 静态库、动态库、静态链接、动态链接、系统运行库混合、MD MT默认库冲突问题
.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值