20_链接过程简介

关键词:静态链接、Linux下静态库的创建和使用、动态链接、 Linux下动态库的创建和使用

1. 问题

工程中的每个C语言源文件被编译后生产目标文件,这些目标文件如何生存最终的可执行程序?
链接器的意义:链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接
20_链接过程简介_第1张图片

2. 静态链接

  • 概念:由链接器在链接时将库的内容直接加入到可执行程序中
    20_链接过程简介_第2张图片

3. Linux下静态库的创建和使用

  • 编译静态库源码:gcc -c lib.c -o lib.o
  • 生成静态库文件:ar -q lib.a lib.o
  • 使用静态库编译:gcc main.c lib.a -o main.out

4. 动态链接

  • 可执行程序在运行时才动态加载库进行链接
  • 库的内容不会进入可执行程序当中
    20_链接过程简介_第3张图片

5. Linux下动态库的创建和使用

  • 创建动态库源码:gcc -shared dlib.c -o dlib.so
  • 使用动态库编译:gcc main.c -ldl -o main.out
  • 关键系统调用:
    dlopen:打开动态库文件
    dlsym:查找动态库中的函数并返回调用地址
    dlclose:关闭动态库文件

6. 小结

  • 链接是指将目标文件最终链接为可执行程序
  • 静态链接:目标文件直接链接进入可执行程序
  • 动态链接:在程序启动后才动态加载目标文件

声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

你可能感兴趣的:(C语言深度解析,静态链接,Linux下静态库的创建和使用,动态链接,Linux下动态库的创建和使用)