linux系统环境下的静态库和动态库的制作
linux系统下的应用编程需要系统提供的库文件,包括静态库或动态库。不管是静态库还是动态库,都是编译好的二进制文件。在我们编译程序时要链接的目标文件,静态库是链接的时候直接编译到程序里,和程序成为一体,因此程序代码的体积较大,而动态库链接之后,库文件和程序不为一体,只有在代码运行时才会找相应的库文件进行链接,故而代码体积小,运行速度更快。
接下来我就将linux系统下的静态库和动态库的制作过程,做个简单的介绍。
一、静态库的制作
1.如下图所示,编写示例工程代码dayin.c 、dayin.h、test.c

其中dayin.c文件为要封装的静态库源码,dayin.h文件存放功能函数的申明,test.c是要验证静态库功能的源码文件
2.编译功能源码文件,生成dayin.o目标文件:gcc -c dayin.c
3.执行命令生成静态库文件:ar crs libdayin.a dayin.o
4.编译生成测试程序test:gcc -o test test.c -L. -ldayin (-L.为指定静态库的路径,.为当前目录下)
5.删除静态库文件之后,能够再此正常运行

二、动态库制作过程
1.编写制作动态库的示例工程代码shuru.c shuchu.c head.h main.c

2.编译功能模块shuru.c和shuchu.c生成与路径无关的目标文件:gcc -c -fPIC shuru.c shuchu.c
3.生成动态库文件:gcc -shared -o libdongtai.so.1 shuru.o shuchu.o
4.创建动态库的软连接:ln -s libdongtai.so.1 libdongtai.so
5.编译测试程序:gcc -o main main.c -L. -ldongtai
6.运行可执行性文件时,会报错误,因为没有添加环境变量,下面有三种解决方案。
错误信息:./main: error while loading shared libraries: libdongtai.so: cannot open shared object file: No such file or directory
1)添加临时的环境变量,只在当前终端有效:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
2)把生成的动态库文件和软连接拷贝到/usr/lib下或/lib下,不过一般不建议这种操作,因为两个目录下一般为系统的库文件所在的路径。
3)添加配置文件:在/etc/ld.so.conf.d/下添加my.conf文件,加入库所在的路径:/home/lolors/test/library1/
添加完毕后,刷新:ldconfig即可。

linux系统环境下的静态库和动态库的制作的更多相关文章
- 解决Linux系统下程序找不到动态库的方法
思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- [转]Linux下用gcc/g++生成静态库和动态库(Z)
Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10| 分类: linux | 标签:链接库 linux g++ gcc |举报|字号 订阅 ...
- linux下的共享库(动态库)和静态库
1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...
- 【转】Linux下gcc生成和使用静态库和动态库详解
一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不 ...
- (笔记)Linux下的静态库和动态库使用详解
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...
- Linux下GCC生成和使用静态库和动态库【转】
本文转载自:http://www.cppblog.com/deane/articles/165216.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本 ...
随机推荐
- 安卓基础干货(六):安卓Activity的学习
AndroidManifest文件中的几个细节 结论: 1.一个应用程序可以创建多个桌面图标 2.创建快捷图标的方法: <intent-filter> //应用程序的入口 <acti ...
- RxJava 中的map与flatMap
1.map和flatMap都是接受一个函数作为参数(Func1) 2.map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1 ...
- 程序员装B指南(转载)
转自:http://www.oschina.net/question/615783_115390 一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,但是双屏是必须的 ...
- 颜色矩原理及Python实现
原理 颜色矩(color moments)是由Stricker 和Orengo所提出的一种非常简单而有效的颜色特征.这种方法的数学基础在于图像中任何的颜色分布均可以用它的矩来表示.此外,由于颜色分布信 ...
- html的文件控件<input type="file">样式的改变
一直以来,<input type="file">上传文件标签默认样式都是让人不爽的,使用它多要给它整整容什么的,当然如果用ui插件还比较方便,不能就自己来操刀实践一下! ...
- UIButton的titleLabel
UIButton的titleLabel @property(nonatomic, readonly, retain) UILabel *titleLabel Description - 描述A vie ...
- 架设Git服务器
架设Git服务器项目 Git Candy:http://github.com/Aimeast/GitCandy/ AE大神的作品, Git Candy© 是一个基于ASP.NET MVC的Git分布式 ...
- mvc 从客户端 中检测到有潜在危险的 Request 值
往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误: 从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...
- [EffectiveC++]item37:绝不重新定义继承而来的缺省参数值
绝不重新定义继承而来的缺省参数值 静态类型 动态类型
- Oracle Update语句
Oracle没有update from语法,可以通过四种写法实现同样的功能: 一.标准update语法(常用.速度可能最慢) 当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择. u ...