Linux下gcc和动态静态库
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命令
动态库:
有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