当前位置: 首页 > news >正文

Linux学习——动态链接库和静态链接库

静态链接库:

 用户在生成可执行文件时,调用的以.a结尾的库文件

动态链接库:

用户在生成可执行文件时,调用的以.so/.so.1.xxx结尾的库文件

 

静态库文件在编译时,会编译到可执行文件里面,所以在运行的时候,可以不依赖于静态库文件,造成生成的可执行文件过大。

静态库在编译时,不会包含到可执行文件中,通常在运行时,需要将对应的动态库文件一起拷贝,才能正常执行,但是可执行文件一般比较小。

 

.la 为libtool生成的共享库,其实是个配置文档。可以用file或者vim查看。

.ko 文件是Linux内核使用的动态链接文件后缀,属于模块文件,用在Linux系统启动时加载内核模块。

 

创建和生成库文件

1、gcc -c test.c                    生成.o的对象文件

2、ar -r libtest.a test1.o test2.o           生成libtest.a的静态库文件

3、gcc -Wall -fpic -shared test1.c test2.c -o libtest.so  生成动态库文件

4、.la库一般通过makefile生成。

 

gcc test.c -o test -I/usr/local/include -L/usr/local/lib -la -lb -lc

gcc test.c -o test -I/usr/local/include /usr/local/lib/liba.a /home/usr/local/lib/libb.a /home/usr/local/libc.a

 

./configure CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"    等效于 export CFLAGS=“$CFLAGS:/usr/local/include”;LDFLAGS="$LDFLAGS:/usr/local/lib"

 

多个静态文件链接成一个静态文件:

.a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表
假设A.a, B.a C.a 在/usr/local/lib目录下
mkdir /tmp/libABC
cd /tmp/libABC
ar x /usr/local/lib/A.a
ar x /usr/local/lib/B.a
ar x /usr/local/lib/C.a
ar cru libABC.a *.o
ranlib libABC.a

 

 

转载于:https://www.cnblogs.com/Blog-c/p/7811190.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Beego学习笔记5:MVC-VC
  • 信用风险评分卡研究(一)
  • C# 测量程序运行时间
  • QUdpSocket-Qt使用Udp通讯实现服务端和客户端
  • C程序优化
  • [Luogu 3958] NOIP2017 D2T1 奶酪
  • 如何走上更高平台分享传递干货知识:(开通个人Github面向开源及私有软件项目的托管平台:https://github.com/zlslch/)(图文详解)(博主推荐)...
  • H.264基础知识总结
  • Msys2的安装,并整合到cmder中
  • cron
  • 参数添加 dynamo
  • Oracle初级——续续篇
  • transient关键字
  • [codeforces] 25E Test || hash
  • python入门----hello world
  • 30秒的PHP代码片段(1)数组 - Array
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Bytom交易说明(账户管理模式)
  • Codepen 每日精选(2018-3-25)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • es6(二):字符串的扩展
  • ES6语法详解(一)
  • HTTP中的ETag在移动客户端的应用
  • Javascript设计模式学习之Observer(观察者)模式
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS实现简单的MVC模式开发小游戏
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • spring boot 整合mybatis 无法输出sql的问题
  • windows下mongoDB的环境配置
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 欢迎参加第二届中国游戏开发者大会
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 扑朔迷离的属性和特性【彻底弄清】
  • 普通函数和构造函数的区别
  • 与 ConTeXt MkIV 官方文档的接驳
  • 主流的CSS水平和垂直居中技术大全
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​520就是要宠粉,你的心头书我买单
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #QT(一种朴素的计算器实现方法)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #数据结构 笔记三
  • (7)摄像机和云台
  • (八)Spring源码解析:Spring MVC
  • (回溯) LeetCode 78. 子集
  • (十二)Flink Table API
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)图像的%2线性拉伸
  • ./configure,make,make install的作用
  • .bat文件调用java类的main方法
  • .form文件_SSM框架文件上传篇
  • .jks文件(JAVA KeyStore)
  • .NET Core 项目指定SDK版本