0. 基本

  • 在命名上,静态库的名字一般是 libxxx.a,动态库的名字一般是 libxxx.so,有时 libxxx.so.major.minor,xxx 是该 lib 的名字,major 是主版本号,minor是副版本号。
  • linux 系统存放函数库的目录:/lib(/lib64),/usr/lib(/usr/lib64)

    lrwxrwxrwx.   1 root root    7 Sep  2 22:24 lib -> usr/lib
    lrwxrwxrwx.   1 root root    9 Sep  2 22:24 lib64 -> usr/lib64

1. 判断一个程序有没有链接程序库

  • file:查看文件类型;
  • ldd:将所有依赖的动态函数库取出来查阅;
$ ldd $(which sshd)# which sshd ⇒ /usr/bin/sshd
$ ldd $(which sshd rsyslogd xinetd httpd)

2. 静态库与动态库的编译

  • 静态库:

    • 1、生成目标文件:
    $ gcc -Wall -c file1.c file2.c file3.c# 不用指定生成.o文件名(默认生成file1.o, file2.o, file3.o)。
    • 2、从.o目标文件创建静态连接库:
    $ ar rv libNAME.a file1.o file2.o file3.o

    r : 将flie1.o, file2,o, file3.o插入archive,如故原先archive中已经存在某文件,则先将该文件删除。
    v : 显示ar操作的附加信息

  • 动态库:

    • 1、生成目标文件
    $ gcc -Wall -c -fpic file1.c file2.c file3.c# 可选参数# -g:生成调试信息,供 gdb 使用# -o0:指定编译优化级别

    fpic: 指定生成的.o目标文件可被重定址. pic是position idependent code的缩写: 位置无关代码.

    • 2、生成动态库文件
    $ gcc -shared -o libNAME.so file1.o file2.o file3.o

    一般地, 连接器使用main()函数作为程序入口. 但在动态共享库中没有这样的入口. 所以就要指定-shared选项来避免编译器显示出错信息.

    • 3、上述两条命令可以合并为:
    $ gcc -Wall -shared -fpic -o libNAME so file1.c file2.c file3.c

references

  • Linux静态库和动态库学习总结

Linux 下的静态(函数)库、动态(函数)库相关推荐

  1. C语言 | Linux下的静态链接与动态链接

    1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 前言 上一篇分享了静态链接与动态链接的实验(Windows): ...

  2. linux修改ip dhcp,Linux下在静态IP与动态DHCP之间切换的脚本

    因为经常在Vmware机上需要变动IP,有时要在静态与动态之间切换,下面这个小脚本可满足需要,在RHEL4,RHEL5下测试通过 1.创建文件changeIP.sh #vi   changeIP.sh ...

  3. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  4. linux下生成静态库和动态库

    linux下生成静态库和动态库 一.动态库.静态库简介 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常.本质上 ...

  5. 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)

    因之前初学接触这个概念的时候无法直观的理解,询问多人也得到类似如下回复:静态库就是静态库,动态库就是动态库.一个编译一个不编译等类似的回复.伪善的人太多,披着"有问题可以问我"的外 ...

  6. Linux下的静态链接库和动态链接库编程

    Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...

  7. ​Linux下C如何调用PCI Lib函数

    Linux下C如何调用PCI Lib函数 在Linux下,可以通过"setpci"和"setpci"命令来访问PCI设备的配置空间,那么能否用程序来访问PCI ...

  8. Linux下的静态链接库和动态链接库

    Linux下的静态链接库和动态链接库 零.链接库概述 Linux下得库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数, ...

  9. Linux下使用C语言访问MySQL函数

    //mysqlVersion.c /************************************************************* FileName : mysqlVers ...

  10. linux 设备数 of,linux下devicetree中惯用的of函数

    linux下devicetree中常用的of函数 从device_node中获取信息: int of_property_read_u8_array(const struct device_node * ...

最新文章

  1. 面向对象三大特性一一封装(encapsulation)
  2. Python-memcached的基本使用
  3. python爬虫教程下载-Python爬虫视频教程全集下载
  4. 鸿蒙系统r如何升级,高歌猛进,鸿蒙系统升级机型再次确认,花粉:终等到!...
  5. 选择适合你的开源 OLAP 引擎
  6. 《代码敲不队》第三次作业:团队项目的原型设计
  7. OLED电视出现烧屏问题 LG电子被判赔偿消费者16万澳元
  8. oracle中的自增关键字,Oracle中设置自增字段
  9. thinkphp对数据库操作有哪些内置函数
  10. opengl光照效果之点光源
  11. Python DataTable用法(一)
  12. Golang:后台管理系统Revel搭建教程
  13. 手机怎样设置垃圾短信拦截?
  14. 二维码门禁助力于打造更智能化的出入管理-码上开门,说走就走
  15. kasp技术原理_SNP检测Massarray法怎么样?中高通量大样本适用吗?
  16. Given no hashes to check 131 links for project 'pip': discarding no candidates
  17. 从零搭建开发脚手架 Spring Boot集成Mybatis-plus之一
  18. 《梦的解析》-西格蒙得·弗洛伊德
  19. gtj2018如何生成工程量报表_问答系列之广联达GTJ2018常见问题汇总
  20. 华为云618年中钜惠,服务器免费领三个月

热门文章

  1. 程序转制作人——游戏设计课程导论
  2. ND2D源码及范例工程(编译通过)
  3. DXUT框架剖析(11)
  4. 如何使用 Visual C# 加密和解密文件
  5. jedis操作set_使用 JedisAPI 操作 Redis
  6. python内置高阶函数_map()函数~~内置的高阶函数
  7. Softmax Derivation
  8. python3.6中内置函数变化
  9. LeetCode 213. 打家劫舍 II(动态规划)
  10. Qt总结之十八:总结