Linux之静态库和动态库的制作

静态库

      

      1、静态库的命名规则:

                   (1)、lib+库的名字+.a

                   (2)、libmytest.a                  库的名字               红色标记部分为库的名字,左右两边为 静态库的标准格式

       2、制作步骤:

                   (1)、生成对应的.o文件     ==============》   .c ---------------> .o   -c

                                   gcc -c *.c -I../include

                                  Linux之静态库和动态库的制作

                   (2)、将生成的.o文件打包    ar rcs + 静态库的名字(  libMyTest.a  )   + 生成的所有 .o

                                   ar rcs libMyCalc.a *.o

                                  Linux之静态库和动态库的制作

       3、使用和发布静态库:

                   (1)、发布静态库

                   (2)、头文件也一起发布给用户

                                  Linux之静态库和动态库的制作

       4、生成可执行程序的方法:

                   (1)、第一种方法:

                                  gcc main.c  lib/MyCalc.a -I include -o clac

                                   Linux之静态库和动态库的制作

                   (2)、第二种方法(比较常见):

                                 gcc main.c -Iinclude -L./ib -l MyCalc -o mycalc

                                 Linux之静态库和动态库的制作

                    注:  -L 指的是我们要调用的库的目录     -l     指的是库的名字,掐头去尾,去掉 .lib 和后缀的 .a

        5、打包 *,o 的工具:

                   ar  rcs  libMyCalc.a  *.o

        6、静态库的优缺点:

                   (1)、优点:

                                 (a)、发布程序的时候不需要提供相应的库

                                 (b)、加载库的速度快相对于动态库快

                   (2)、缺点:

                                (a)、库被打包到应用程序中,导致库的体积很大

                                (b)、库发生了改变,需要重新编译

         7、静态库的工作示意图:

                        Linux之静态库和动态库的制作

共享库(动态链接库)

         1、命名规则:

                    lib + 名字 + .so

          2、制作步骤:

                   (1)、生成与位置无关代码(生成与位置无关的  .o  文件)

                                    gcc -fPIC -c *.c -I../include

                   (2)、将 .o 打包成共享库(动态库)------------>  打报工具 :  gcc

                             gcc -shared -o libMyCalc_share.so *.o -I../include     

          3、发布和使用共享库:

                   (1)、生成与位置无关的 *.o 文件

                                gcc -fPIC -c *.c -I../include

                                 Linux之静态库和动态库的制作

                   (2)、打包

                                gcc -shared -o libMyCalc_share.so *.o -I../include

                                 Linux之静态库和动态库的制作

                   (3)、使用动态库

                                   (a)、第一种方法:  gcc main.c lib/libMyCalc_share.so -I./include -o app

                                             Linux之静态库和动态库的制作

                                   (b)、这种方法程序会报错:gcc main.c -I./include -Llib -lMyCalc_share -o myapp

                                             Linux之静态库和动态库的制作

                   (4)、ldd 查看可执行程序运行时,所依赖的共享库

                   (5)、动态链接器

                            Linux之静态库和动态库的制作

           4、解决程序执行时动态库无法加载的问题:

                   (1)、放到系统的库目录中         ---------------------            不允许使用

                             sudo cp ./lib/libMyCalc_share.so /lib

                             Linux之静态库和动态库的制作

                   (2)、临时测试(建议使用)

                                 (a)、环境变量: LD_LIBRARY_PATH = 将动态库的路径设置给该变量

                                        LD_LIBRARY_PATH=/home/arrayli/day03/dynamic/lib

                                 (b)、将设置的值导入到系统的环境变量中 

                                            export LD_LIBRARY_PATH=/home/arrayli/day03/dynamic/lib

                                         Linux之静态库和动态库的制作

                        注:当前终端关闭后,设置会失效


                   (3)、不常用的方法(永久设置)

                                  (a)、在家目录的 .bashrc文件中添加一句话:

                                           export LD_LIBRARY_PATH=/home/arrayli/day03/dynamic/lib

                                  (b)、.bashrc修改完成,需要重启终端

                                         Linux之静态库和动态库的制作

               

                                         Linux之静态库和动态库的制作

                           

                  (4)、必须掌握这种方法

                                  (a)、需要找到动态链接器的配置文件 -------------------  /etc/ld.so.conf

                                  (b)、动态库的路径写到配置文件中   --------------------  绝对路径

                                  (c)、更新                                            -------------------   sudo ldconfig -v

                                 Linux之静态库和动态库的制作


                                 Linux之静态库和动态库的制作

        5、动态库的优缺点:

                 (1)、优点:

                                (a)、执行程序的体积很小

                                (b)、动态库有了更新,不需要重新编译程序(函数接口不变)

                 (2)、缺点:

                                (a)、发布程序的时候,需要将动态库提供给用户

                                (b)、动态库没有被打包到应用程序中,加载速度相对静态库较慢

            

小结:

           小编在这里使用文字叙述和代码图片的详细步骤,介绍Linux环境里面静态库和动态库的制作和使用。由于小编水平有限,在本博客中有不足或者欠缺的地方

欢迎各位大佬前来指导 。