1.什么是库:

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

2.静态库

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

优缺点:               

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

 3.动态库

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

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

 4.库的制作及使用 

  • 静态库的制作       

xxx.c 文件 生成  xxx.o文件:

gcc xxx.c -c

ios动态库符号冲突问题 动态库作用_ios动态库符号冲突问题

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

ar -rcs libnew.a xxx.o

ios动态库符号冲突问题 动态库作用_动态库_02

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

  •  静态库的使用

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

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

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

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

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

ios动态库符号冲突问题 动态库作用_linux_03

  •  动态库的制作

xxx.c 文件生成动态库文件:

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

ios动态库符号冲突问题 动态库作用_静态库_04

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

    

ios动态库符号冲突问题 动态库作用_linux_05

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

export LD_LIBRARY_PATH="/home/pi/TEXT"

ios动态库符号冲突问题 动态库作用_静态库_06

xxx)写在一起。


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

chmod  +x  stat.sh 

 

ios动态库符号冲突问题 动态库作用_静态库_07