Linux 动态库和静态库

1.什么是库:

在开发的时候,不想让人看到源码,但别人又要用你的东西,那么就要把你所写的东西打包变成库。

2.静态库

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

优缺点:               

  • 优点:
    1. 加载速度快
    2. 发布程序无需提供静态库,应为已经在app中,移植方便
  • 缺点:
    1. 链接时完整的拷贝至可执行文件中,被多次使用就会有多次冗余拷贝
    2. 更新,部署,发布麻烦

 3.动态库

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

  • 优点:
    1. 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存
    2. 程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功
  • 缺点:
    1. 加载速度比静态库慢
    2. 发布程序需要提供依赖的动态库

 4.库的制作及使用 

  • 静态库的制作       

        1. 将要打包的 xxx.c 文件 生成  xxx.o文件

     gcc xxx.c -c  

         2. 用 xxx.o文件 生成静态库文件:

     ar -rcs libnew.a xxx.o

生成的静态库文件把头和尾去掉(把 lib.a 去掉)就是库的名称

  •  静态库的使用

gcc main.c -lnew -L ./ -o xxx  

       main.c 是具有主函数的C文件

                -l 是C文件要用到的库,库的名字是new

                        -L是从指定的路径去找库,默认是/usr/lib/

                                -o生成一个名为 xxx 的执行程序

  •  动态库的制作

        将要打包的 xxx.c 文件生成动态库文件:

    gcc -shared -fpic xxx.c -o libxxx.so

  •  动态库的使用 
    gcc main.c -lnew -L ./ -o xxx

    

 当我们编译完成想执行程序的时候,程序并没有能够执行起来,这是因为动态库是在程序执行的时候动态(临时)由目标程序去调用,所以程序在运行时会去 /usr/lib/ 里面去找这个动态库,但现在在/usr/lib/并没有这个库,为了让程序可以执行起来把我们新建的库复制到/usr/lib/里面去。但我们不可能每一次都把这个库放到/usr/lib/里面去,所以带动态库的程序,运行时可以指定该程序运行时,在LD_LIBRARY_PATH 所指定的路径去找库文件:

    export LD_LIBRARY_PATH="/home/pi/TEXT"

 但这只是临时的,换一个窗口又不行了,所以为了方便一般会写一个脚本将它与程序的运行文件(xxx)写在一起。

因为这个脚本是没有可执行的权限的所以 要给这个脚本加上可执行的权限:

chmod  +x  stat.sh 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值