美文网首页
制作及使用静态库和共享库

制作及使用静态库和共享库

作者: 温暖春阳 | 来源:发表于2018-03-30 22:45 被阅读14次

    静态库

    制作

    1. 编译为 .o 文件
    2. 将.o文件 打包: ar rcs libmycalc.a file1.o file2.o file3.o ...
    第一步、编译
    ~/Calc/src$ gcc -c *.c  -I ../include/
    第二步、打包
    ~/Calc/src$ ar rsc libCalc.a *.o
    第三步、移动
    ~/Calc/src$ mv libCalc.a ../lib
    第四步、编译
    ~/Calc$ gcc main.c -o app -I include/ -L lib/ -lCalc
    第五步、执行
    nm libCalc.a查看文件内容
    
    1. 将头文件与库一起发布

    使用

    编译时 需要加静态库名(记得路径),-I 包含头文件

    优缺点总结

    优点:

    1. 执行快
    2. 发布应用时不需要发布库

    缺点:

    1. 执行程序体积会比较大
    2. 库变更时需要重新编译应用

    动态库

    制作步骤

    1. 编译与位置无关的代码,生成.o,关键参数 -fPIC
    2. 将.o文件打包:关键参数 -shared
    3. 将库与头文件一起发布

    使用

    -L 指定动态库路径 -l指定库名

    gcc -o newapp main.c -L ./lib -lmycalc -I ./include/
    

    解决不能加载动态库的问题

    1. 拷贝到 /lib下--- 不允许
    cd /lib
    cd usr/lib
    
    1. 将库路径增加到环境变量 LD_LIBRARY_PATH中,不是特别推荐
    将库所在的路径,添加到环境变量中,用冒号分割
    
    1. 配置 /etc/ld.so.conf 文件,增加 /home/itcast/backup/cmd/Calc/lib 路径,步骤如下
    1. sudo vi /etc/lb.so.conf(配置文件)
    2. /home/itcast/backup/cmd/Calc/lib (添加文件绝对路径)
    3. sudo ldconfig -v(更新)这只是一次性的
    

    优缺点总结

    缺点:

    1. 执行时需要加载动态库,相对而言,比静态库慢
    2. 发布应用时需要同时发布动态库

    优点:

    1. 执行程序体积小
    2. 库变更时,一般不需要重新编译应用

    相关文章

      网友评论

          本文标题:制作及使用静态库和共享库

          本文链接:https://www.haomeiwen.com/subject/jiswcftx.html