长风破浪会有时,直挂云帆济沧海

Dream Word

博客园 首页 新随笔 联系 订阅 管理

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

posted on 2018-03-25 16:36  长风II  阅读(123)  评论(0)    收藏  举报