Linux下gcc和动态静态库

gcc: 

Linux下gcc和动态静态库 Linux下gcc和动态静态库

静态库:

有sub.c add.c div.c mul.c ,将他们编译成静态库
gcc -c  *.c 
生成了相应 *.o 文件,使用ar打包.
ar rcs libCalc.a *.o
使用nm查看库信息
nm libCalc.a 
使用库:lib下存放libCalc.a,include 下存放头文件。
gcc main.c -o main -I include -L lib/ -lCalc

参考linux上静态库和动态库的编译和使用(附外部符号错误浅谈)

参考ar 命令 Linux ar命令Linux下gcc和动态静态库

 

动态库:

有sub.c add.c div.c mul.c ,将他们编译成动态库,PIC与位置无关的
gcc -fPIC -c *.c -I include 
生成动态库
gcc -shared -o libCalc.so *.o
使用库:lib下存放libCalc.so,include 下存放头文件。
gcc main.c -o main -I include -L lib/ -lCalc

可以发现动态库生成的执行程序要比静态库小,可以使用ldd main 查看程序使用到的库。
怎么让可执行程序运行时找到制作的库。

  • 将生成的libCalc.so拷贝到/lib下,或者做成软连接(不推荐使用,可能会与其他人的库重名)
  • 设置环境变量LD_LIBRARY_PATH,/xxx/xxx/lib制作动态库的路径(不推荐使用)
    export LD_LIBRARY_PATH=/xxx/xxx/lib/:$LD_LIBRARY_PATH
  • 修改文件/etc/ld.so.conf添加自制的库路径(推荐使用)
    /xxx/xxx/lib
    立即生效sudo ldconfig -v

Linux下gcc和动态静态库 Linux下gcc和动态静态库