zoukankan      html  css  js  c++  java
  • 静态库和动态库

    1:库是什么?

      二进制文件

      将源代码 -> 二进制格式的源代码

      加密

    2:   库制作出来之后,如何给用户使用?

      头文件

      制作出来的库

    3:静态库的制作和使用

      命名规则:libtest.a

        (1):lib

        (2):xxx-库的名字

        (3).a

      制作步骤

        (1):原材料:源代码.c .cpp

        (2):将源代码生成.o: gcc a.c b.c -c

        (3):将.o打包:

            ar rcs 静态库的名字 原材料

            ar rcs libtest.a a.o b.o

              ar - archive

            nm libtest.a 查看静态库

      库的使用

          gcc main.c -I ../include/ -L ../lib/ ltest -o app

           -L:指定库的路径

           -l:指定库的名字

    4:动态库的制作和使用.so

      命名规则

        libxxx.so

      制作步骤

        (1):将源文件生成.o

          gcc  a.c b.c -c -fpic(fPIC) 

        (2):打包成动态库

          gcc -shared a.o b.o -o libxxx.so

      库的使用

        头文件a.h

        动态库libtest.so

        参考函数声明编程测试main.c

          gcc main.c -I ./include/ -L ./lib -ltest -o app

        对于elf格式的可执行程序(file app),ldd app 查看链接的库,是由ld-linux.so*来完成的,它先后搜索elf文件的DT_RPATH路径 - 环境变量LD_LIBRARY_PATH - /etc/ld.so.cache文件列表 - /lib/ ,/usr/lib目录找到库文件后将其载入内存。

      链接不上,解决方案:

      (1): 复制到/lib 路径

      (2):使用环境变量:

          I:临时设置

            在终端: export LD_LIBRARY_PATH=动态库路径:$LD_LIBRARY_PATH

                 export LD_LIBRARY_PATH=动态库路径

          II:永久模式

            用户级别:

              ~/.bashrc

                配置完成,重启终端

                source ~/.bashrc

            系统级别:

              /etc/profile

                source /etc/profile

          III:更新/etc/ld.so.cache文件列表

            找到一个配置文件

              /etc/ld.so.conf

              把动态库的绝对路径添加到文件中

              执行命令:sudo ldconfig -v

      (3):dlopen,dlclose,dlsym

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    建立自己的影响力
    在病房垒代码
    知乎确实不错
    不在乎你用到了什么技术,而在于你提供了哪些有价值的东西
    oschina上有不少好的项目
    我为何坚守Java?
    掌握了学习方法才能学到更多知识
    Jrebel实现Jetty 热部署
    互联网到底能干什么?我们还能干些什么?
    centos 阿里云 安装VNC Viewer
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8645341.html
Copyright © 2011-2022 走看看