静态库:格式必须为lib**.a (以lib开头,.a结尾的文件)
1.编译生成.o文件:gcc -c add.c main.c
2.创建静态库:ar crv libfoo.a add.o main.o
3.使用静态库:gcc -o main main.c -L . -l foo (-L后跟可执行文件所在路径,-l后跟除了lib开头,.a结尾的文件名,main为可执行文件)
动态库(共享库):格式为lib**.so
生成.o文件:gcc -c add.c mul.c
创建动态库:gcc -shared -fPIC -o libfoo.so add.o mul.o
动态库要放在/lib或/usr/lib路径下
使用动态库方法1:gcc -o main main.c -lfoo (可执行文件在当前路径下-L可省略)
使用动态库方法2:修改环境变量使得动态链接路径由原来的/lib或/usr/lib改为自定义路径
环境变量
修改环境变量:export LD_LIBRARY_PATH=. (改为当前路径)
查看环境变量的值:echo $LD_LIBRARY_PATH
删除环境变量:unset LD_LIBRARY_PATH
ldd命令:查看可执行文件使用的动态库
动态库和静态库的区别:
静态库在链接是把要用到的方法包含到最终生成的可执行程序中
动态库不包括,只做标记。程序运行时才动态加载,所以动态库体积小