美文网首页
C 静态库和动态库

C 静态库和动态库

作者: 悟剑声 | 来源:发表于2016-08-10 05:17 被阅读37次

    存在文件

    • a.c b.c all.h main.c

    静态库

    linux以.a为后缀,win下lib为后缀

    • 生成a.o b.o
      gcc -c a.c b.c

    • 生成静态库testa,命名方式为lib开头,“.a”结尾
      ar crs libtesta.a a.o b.o

    • 生成a.out
      gcc main.c -L. -ltesta

    动态库

    linux以.so为后缀,win下以.dll为后缀

    • 生成a.o b.o,位置无关的代码(Position Idpendent Code, PIC)
      gcc -c -fPIC a.c b.c

    • 生成静态库testb
      gcc -shared -o libtestb.so a.o b.o

    • 生成a.out
      gcc main.c -L. -ltestb

    • 直接运行时,可能找不到链接库
      cannot open shared object file: No such file or directory,解决办法有下面几种
      <ol>
      <li>添加变量LD_LIBRARY_PATH来指定首先搜索库的路径
      export LD_LIBRARY_PATH=动态库的所在路径
      打印变量使用echo,删除变量使用unset
      </li>
      <li>用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
      ln -s 动态库名 /usr/lib
      </li>
      <li>修改/etc/ld.so.conf,然后刷新
      vim /etc/ld.so.conf
      add 动态库路径
      sudo ldconfig
      </li>
      </ol>

    相关文章

      网友评论

          本文标题:C 静态库和动态库

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