liunx下的库

一、库

1、库就是一段可加载到内存中执行的二进制编码(可以理解为写函数的人将函数只编译不链接生成二进制的目标文件,这些目标文件的集合就是库,这样没人能知道函数的具体实现,可以很好地保护作者的知识产权)

2、库的作用:提高代码的复用率,节省资源(有些功能在一个程序中会多次使用,通过库我们可以直接调用别人写好的函数,而不用在每个程序中重复写同样的函数,这样可以节省空间)

3、库的分类:(1)静态库(在程序编译的时候链接,直接将函数的目标代码复制到程序当中,最终生成的可执行文件离开库,也可以运行,代码执行效率比动态库好。但是代码体量变大)

                       (2)动态库(程序编译好后,在程序运行到函数位置时,再链接,没有相应的库,可执行文件无法执行,但调试更方便,函数出了问题,可以直接改函数库,可执行文件随着改变,而静态库做不到)

        liunx下的静态库:libxxx.a libxxx.so(动态库)

        Windows下的静态库:.dll .lib(动态库)

4、库的制作:(1)静态库的制作

                                gcc 源文件 -c (只编译不链接,生成文件后缀为.o的目标文件)

                                ar crv lib库名.a +所有需要加载到静态库的目标文件(c表示创建,v表示显示过程,与tar归档命令的选项相似)

                       (2)静态库的使用

                                在编译时加选项进行配置 (gcc main.c -L ./ -l func(在编译时链接当前路径下的func静态库)) 

                                -L 指定库的路径

                                -l 指定库的名字

                        (3)动态库的制作

                                gcc -fPIC -c 源文件 (生成与地址无关的编译程序,这样当动态库需要链接的时候,我们可以在任何地方找到使用动态库中的函数)

                                gcc -shared -o libxx.so  +所有的目标文件

                        (4)动态库的使用

                                动态库创建好后一般无法直接使用,系统会提示找不到动态库

                                有三种解决方法:

                                第一种:将制作好的动态库放在liunx系统中管理库文件的路径/lib /usr/lib(这种方式需要管理员权限,不安全,不推荐)

                                第二种:配置动态库相关的环境变量

                                export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:+动态库路径(这种事属于临时配置,重启则失效,不推荐)

                                第三种:修改配置文件,在/etc/ld.so.conf.d/目录下创建xx.conf,在该配置文件内添加动态库的路径

                                完成后要使用 sudo ldconfig 重启配置才能生效

                                动态库的使用方法与静态库相同 gcc +源程序 + -L +库的路径 + -l +库名

                        

                                

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿浩子不是耗子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值