linux:静态库和动态库

静态库:在编译过程中将所有函数载入,体积大

  • 静态库的产生:
    1. 由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表
    2. ar命令将很多.o转换成.a,成为静态库
  • 静态库的命名:一般为libxxxx.a,其中xxxx是该lib的名称
  • 静态库的生成与使用(举例):
    1. 需要头文件hello.h,源程序hello.c,主程序main.c,都放在同一文件夹testit中
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    2. 通过以下命令生成hello.o文件在这里插入图片描述
    3. 创建静态库文件libmyfile.a在这里插入图片描述
    4. 连接静态库文件生成目标程序在这里插入图片描述
      -static :表示程序的静态链接
      -lmyfile:链接静态库myfile
      -L. :链接时需指明静态库所存在的路径,‘.’表示当前路径

动态库:在可执行程序运行时才载入,体积小

  • 动态库的产生:动态库的后缀是.so,它由gcc加特定参数编译产生
  • 动态库的命名:一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
  • 动态库的生成与使用(举例):
    1. 头文件hello.h,源程序hello.c,主程序main.c与静态库一样
    2. 生成hello.o文件的操作与静态库一样
    3. 通过以下操作生成动态库libmyfile.so在这里插入图片描述
    4. 通过以下操作生成可执行文件hello:在这里插入图片描述
    5. 但直接执行文件会出错,因为找不到libmyfile.so这个库,系统默认在系统的库文件夹里面搜索。懒得去改动系统文件 (其实是没找到),所以我们在每次执行的时候都执行一段语句指定动态库路径。下面给出执行错误和指定路径运行的情况:在这里插入图片描述在这里插入图片描述
      这里的".“是相对路径,可以用”…"表示上一级文件夹,诸如此类

猜你喜欢

转载自blog.csdn.net/qq_43394900/article/details/83144920
今日推荐