C语言:动态库与静态库,共享库

本文详细介绍了Linux系统中如何创建和使用静态库与动态库。静态库在程序执行前被整合到目标程序中,运行速度快但体积大;动态库在程序运行时动态加载,运行速度较慢但体积小。文章提供了静态库和动态库的制作步骤,包括编译源代码和生成相应库文件,并展示了如何在程序中链接和使用这些库。同时,针对动态库的使用,文章强调了运行时可能需要指定动态库路径的问题及其解决方法。
摘要由CSDN通过智能技术生成

目录

1、库

1.1 静态库 

1.2 动态库 

2、库的制作 

        2.1 静态库的制作:格式xxxx.a

         2.2 动态库的制作:

3、库的使用

        3.1 静态库的使用:

        3.2 动态库的使用(与静态库一样):


1、库

参考博文:

https://www.cnblogs.com/sunsky303/p/7731911.html

https://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956

介绍:

        使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。  

        程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):

1、静态函数库,是在程序执行前就加入到目标程序中去了 ;

2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)

Linux中命名系统中共享库的规则

在这里插入图片描述

1.1 静态库 

        静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ;

        优点: 运行快

                  发布程序无需提供静态库,因为已经在app中,移植方便

        缺点:大

1.2 动态库 

        动态函数库,是在程序执行时动态(临时)由目标程序去调用

        缺点: 运行慢

        优点: 小

2、库的制作 

        2.1 静态库的制作:格式xxxx.a

        例子:calcufuncs.c   功能实现的文件

  1. gcc calcufuncs.c -c                                // 生成xxx.o文件
  2. ar rcs libcalcufunc.a calcufuncs.o         // xxx.o文件生成 libxxx.a 静态库文件      

         2.2 动态库的制作:

         gcc -shared -fpic calcufuncs.c -o libcalc.so        //生成 libxxx.so 文件

                -shared 指定生成动态库

                -fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

3、库的使用

        3.1 静态库的使用:

        gcc calculatorT.c -lcalcufunc -L ./ -o mainProStatic

                -lcalcufunc   -l 是指定要用的动态库, libcalcufunc.a 库名砍头去尾  (头lib,尾.a)

                -L 告诉gcc编译器从-L制定的路径去找静态库。默认是从/usr/lib  /usr/local/lib去找

        生成的可执行文件 mainProStatic 可直接运行

        3.2 动态库的使用(与静态库一样):

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

                                    libcalc.so   库名砍头去尾 

         生成的可执行文件 mainProDy 不能直接运行,提示没有这个文件,此时需要指定动态库位置

        引用动态库,怎么指定动态库的位置        

        https://www.cnblogs.com/progamming/p/13043652.html

                带动态库的程序,

                可以指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件 

                export LD_LIBRARY_PATH="/home/pi/back/test"    (临时的,换一个窗口就不行)

         但此时 可执行文件 mainProDy 已经可以运行

如果我们想在其他的窗口也可执行,可以写一个脚本

start.sh  (通过脚本把两个指令并在一起)

export LD_LIBRARY_PATH="/home/pi/back/test" 

./mainProDy 

给脚本文件加一个可执行的权限

chmod +x start.sh

此时 直接运行脚本即可  ./start.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值