库:预先编译(.o)好的方法的集合
Linux下,库分为静态库和共享库。
库的生成
静态库:库名:Libxxx.a,lib是库的前缀,xxx是库名,.a为静态库的后缀。
第一步:将需要生成静态库的.c文件转换为编译后的.o文件
命令:gcc -S mian.o mian.c
第二步:将编译完成的.o文件放到一个集合中,生成静态库
命令:ar cr(v,可以没有) libxxx.a x.o xx.o xxx.o
如何看到库中的内容:为库配置相应的.h文件(声明),或者在使用时将申明写到需要的.c里面。
共享库:库名:Libxxx.so,lib是库的前缀,xxx是库名,.so为共享库的后缀。
命令:gcc -shared -fPIC -o libxxx.so xx.c
-shared做共享库的命令,-fPIC是代码位置无关命令。
库的使用
静态库和共享库的使用基本相同
命令gcc -o main main.c -L库的路径(当前路径.) -lxx(库名)
注意:共享库要将其放在标准目录下才能找到
库一般放在/lib /usr/lib下,头文件在/usr/include下
默认只连接标准C库
可执行 /bin /usr/bin
显示可执行程序用到哪些库 命令 ldd 可执行文件
静态库和共享库的区别
使用静态库里的方法,在编译链接是直接将静态库包含到可执行程序中,运行时不需要用到库,每次都存。链接后删除库仍可运行。
使用共享库里的方法,在编译链接时不包含到可执行程序中,只标记,运行时动态链接。有利于节省内存和磁盘空间。只存一次,有利于升级库。连接后删除库不可运行。
静态库只在链接时找一次。动态库找两次,链接时一次,运行时一次。
注意:LD_LIBRART_PATH 是环境变量,运行时寻找共享库得路径。默认链接到/usr/lib