C 静态库和动态库

存在文件

  • 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,解决办法有下面几种


    1. 添加变量LD_LIBRARY_PATH来指定首先搜索库的路径
      export LD_LIBRARY_PATH=动态库的所在路径
      打印变量使用echo,删除变量使用unset

    2. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
      ln -s 动态库名 /usr/lib

    3. 修改/etc/ld.so.conf,然后刷新
      vim /etc/ld.so.conf
      add 动态库路径
      sudo ldconfig

你可能感兴趣的:(C 静态库和动态库)