【Linux】静态库和动态库

库:预先编译(.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

发布了20 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ifiwere/article/details/104598856
今日推荐