Linuxd的静态库和动态库的区别

277 阅读2分钟

静态库和动态库的区别

  1. 扩展名:

    1. 静态库的后缀一般为<.a>或<.lib>;
    2. 动态库的后缀一般为<.so>或<.dll>。
  2. 链接:

    1. 静态库对函数库的链接是放在编译时期完成的;

    2. 动态库把对一些库函数的链接载入推迟到程序运行的时期。动态库在链接阶段,将库文件和目标二进制文件编译成一个可执行文件,不是形成一个整体,而是在可执行文件中生成一个库函数表单,指定哪一个函数链接的是哪一库。当函数调用时,会去先查找这个库函数表,然后找到要链接的库,然后去外部调用函数。

  3. 编译:

    1. 静态库在编译时会直接整合到目标程序中,编译成功的可执行文件可独立运行;
    2. 动态库在编译的时候,可执行文件无法单独运行。当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用。动态库在后续软件更新方面更加快捷,无需重新编译。
  4. 文件大小:

    1. 静态库生成的可执行文件较大;
    2. 动态库相对静态库来说,编译成的二级制文件相比静态库来说体积小一点。
  5. 执行:

    1. 静态库的所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件,不需要向外部读取函数库的内容;
    2. 动态库的函数调用时,会去先查找这个库函数表,然后找到要链接的库,然后去外部调用函数。
  6. 调用速度:

    1. 静态库不需要去外部寻找函数的实现,所以相对来说调用速度是快的;
    2. 动态库相对静态库来说,调用速度要慢一点。
  7. 后续更新:

    1. 后续程序更新时,需要重新编译一次;
    2. 动态库只需替换对应的库即可,不必重新编译整个可执行文件,在后续软件更新方面更加快捷,无需重新编译。