一、静态库

1.静态库的创建:

  1. 1.编译源文件为目标文件   
  2.     gcc -c demo1.c     
  3. 2.将目标文件打包   
  4.     ar rs libdemo.a demo1.o  

2.静态库的使用:

  1. 1.-L选项用于指定库的路径   
  2. 2.-l选项用于指定库的名称  libstack.a的库名:stack   
  3. 3.举例:gcc main.c -L. -lstack  

3.编译时库的搜索顺序:建议对照头文件的搜索顺序理解:

  • 1.优先查找-L选项指定的路径。
  • 2.查找LIBRARY_PATH环境变量指定的路径
  • 3.查找系统默认的库路径:/lib    /usr/lib …

4.静态库的特点:

  • 1.静态库就是一系列目标文件的集合
  • 2.静态库的在链接时,会被真正链接到可执行文件中。
  • 3.静态库中往往包含了很多函数符号,在链接中只链接用到的函数符号,没有用到的,就不会被链接。

5.静态库的与共享库的区别:

  • 1.在链接共享库时,并不会真正的做链接,所以在运行时仍然需要依赖于共享库。
  • 2.在链接静态库时会将用到的函数符号真正的链接到到可执行文件中,所以在运行时,不用依赖用到的静态库。

6.查找-l指定的库时,如果静态库和共享库同时存在,优先使用共享库。

二、共享库:

1.共享库的创建:

  1. 1.将源文件编译成位置独立(PIC)的目标文件   
  2.     gcc -c -fPIC *.c   
  3. 2.使用gcc的share选项生成共享库   
  4.     gcc -shared -olibdemo.so *.o  

2.共享库的使用:

1.编译:

  1. gcc main.c -L. -lstack  

2.编译时库的查找顺序与静态库相同。

3.运行时共享库的查找:

  • 1.首先查找LD_LIBRARY_PATH环境变量指定的路径。
  • 2.查找/etc/ld.so.cache,该缓存文件由ldconfig工具读取/etc/ld.so.conf文件(当然还包括其他文件)来生成。
  • 3.查找系统缺省库目录:先是/usr/lib   其次是/lib

三、相关库工具的使用:

1.ldconfig

ldconfig -v 命令生成缓存文件,需要root权限,每次修改相关配置文件,都需要执行此操作。

2.ldd

列出可执行文件的库依赖。比如ldd a.out

3.nm

主要用于列出函数符号,与我们写的函数名是一样的。

4.strip

去除指定目标文件,库文件中的调试信息,去除了以后就变成不可调试的。

5.objdump

显示目标文件的内部结构

相关文档下载:Linux_compile_util

关于C语言静态库与共享库及其相关工具

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.