上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法。

1. 什么是动态链接库

所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码。

这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可。

2. 动态链接库的编译与使用方法

使用和上一篇文章相同的代码:main.c  sum.c  sum.h

在 linux 下动态链接库文件一般是这样的名字: libxxx.so

复制代码lv@lenovo: $ ls
main.c    sum.c    sum.h
lv@lenovo: $
lv@lenovo: $ gcc -c -fPIC sum.c                    ##  -fIPC告诉编译器将源代码编译成共享的object文件,PIC(Position-Independent Code)意思是非位置依赖性代码
lv@lenovo: $ ls
main.c    sum.c    sum.h    sum.o
lv@lenovo: $ gcc -shared -fPIC -o libsum.so sum.o  ##  生成动态链接库文件libsum.so
lv@lenovo: $ ls
libsum.so    main.c        sum.c        sum.h        sum.o
lv@lenovo: $
lv@lenovo: $ gcc -o sumappd main.c -L . -lsum      ##  生成可执行程序
lv@lenovo: $ ls
libsum.so    sum.c        sum.o
main.c        sum.h        sumappd
lv@lenovo: $ ./sumappd                             ##  运行生成结果
Num1 + Num2 = 3

结论: 编译时”-lsum“的方式,是不能够区分当前是静态链接还是动态链接的。

如果在同一个目录下同时有静态链接库和动态链接库,则系统默认会引用动态链接库,如果想使用静态链接库则需要在编译时加上”-static“参数。

(注:若使用C++编写,编译的时候将 gcc 改用 g++ 即可)

转载于:https://www.cnblogs.com/lvchaoshun/p/5966788.html

静态链接库与动态链接库 (二)动态链接库的编译与使用相关推荐

  1. 制作静态链接库和动态链接库

    自己制作静态链接库 首先使用gcc -c只编译不连接,生成.o文件,然后使用ar工具进行打包成.a归档文件. 1.1 建立一个源文件和头文件 .C文件: #include <stdio.h> ...

  2. 静态链接库,动态链接库【滴水逆向三期48笔记】

    在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...

  3. MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用

    静态链接库LIB和动态链接库DLL的区别,创建和示例   1.什么是静态连接库,什么是动态链接库   静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都 ...

  4. 动态链接库.so和静态链接库.a的区别

    静态链接库:   •扩展名:.a   •编译行为:在编译的时候,将函数库直接整合到执行程序中(所以利用静态库编译生成的文档会更大)  •独立执行的状态:编译成功的可执行文件可以独立运行,不需要再向外部 ...

  5. GCC 编译 C(C++)静态链接库(gcc -L、gcc -l)和动态链接库(gcc -fPIC -shared)的创建和使用

    1. 库文件 所谓库文件,读者可以将其等价为压缩包文件,该文件内部通常包含不止一个目标文件(也就是二进制文件). 值得一提的是,库文件中每个目标文件存储的代码,并非完整的程序,而是一个个实用的功能模块 ...

  6. C语言函数库:动态链接库与静态链接库

    首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的.经过一些校准和整理,就形成一份标准化的函数库.例如glibc 函数库有两种提供形式:动态链接库与静态链接库 早起函数库里的函 ...

  7. KEIL 创建静态链接库+ 调用自己创建的静态链接库

    1.为什么要创建静态链接库? 当公司或者个人需要提供自己的编写的代码供他人调用时,而你或提供方并不想提供源代码(.c源代码),只想提供头文件.h(在头文件中申明函数)供他人调用,他人在调用时只需要知道 ...

  8. 【转载】linux静态链接库与动态链接库的区别及动态库的创建

    这篇文章对于动态库的概念及使用介绍的很不错,故收藏了. 一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数 ...

  9. Linux环境下c语言静态链接库和动态链接库创建和使用

    库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...

最新文章

  1. 模拟键盘输入的keycode
  2. python返回错误提示_python 错误处理
  3. 在Tableau中实现表格下钻
  4. 机器学习之支持向量机
  5. Hadoop完全分子式环境搭建—问题及解决办法
  6. mysql 命令行 主从复制_MySQL 的主从复制(高级篇)
  7. java后台面试题整理
  8. libreoffice使用_使用LibreOffice Calc管理您的财务
  9. arm b bl 地址无关码_海边同居有甜有虐,又一部BL日剧来了
  10. PYTHON_错误处理
  11. (译)iOS Code Signing: 解惑
  12. vscode自动整理代码_再见了, VS Code!
  13. 2022春山东大学人工智能导论期末题库附答案
  14. 计算平均指令时间_欧姆龙PLC指令应用案例(问答解析)
  15. TouchDesigner处理串口数据
  16. Function eregi is deprecated (解决方法)
  17. 团队项目开发“编码规范”之九:代码分析
  18. GIS是个什么鬼,真的开眼了。感谢好学生的奉献。
  19. Python的并发并行[1] - 线程[3] - 多线程的同步控制
  20. vue详解(一)概述和基础语法

热门文章

  1. windows nodejs mysql_windows server 安装 mysql + nondejs连接mysql
  2. linux 安装redis4.0.6,Redis(4.0.6)在Linux(CentOS7)下的安装
  3. 控制显示隐藏_大众发动机控制单元隐藏功能刷写
  4. python excel操作单元格_python 操作excel表格的方法
  5. 用什么擦地最干净脑筋急转弯_22个数学脑筋急转弯答案,你能全部做出来吗?...
  6. 500个普通人名_2020年世界500强汽车行业排名:大众公司第一,丰田汽车公司第二...
  7. mysql数据库解压安装教程_MySQL数据库之windows 10下解压版MySql安装配置方法教程...
  8. java 获取utc,如何在Java 8中获取UTC + 0日期?
  9. P2114 [NOI2014]起床困难综合症
  10. OpenCV(基础补充)图像二值化