linux下如何创建库文件
来源:互联网 发布:琉璃神社换的域名2017 编辑:程序博客网 时间:2024/06/07 01:33
一、重要概念。
1.1 库文件。库文件实际上是使用共享程序代码的一种方式。库文件分为静态库和动态库。linux下静态库文件的后缀为.a 动态库的后缀为.so。 windows下的静态库文件的后缀为.lib。动态库文件的后缀为.dll。
1.2 静态库。程序编译一般需经预处理、编译、汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接 器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有 多份冗余拷贝。
1.3动态库。动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的复本,因此节省了很多内存。
二、如何使用ar命令创建静态库文件。
2.1 ar 对应的英文是 archive ['ɑ:kaiv] 归档的意思。.a,是静态库,是一个或多个.o文件"打包"(ar)在一起,用于静态链接。(一个.o文件可以有多个函数)
2.2 ar的使用方法。
2.2.1创建一个静态库文件。
ar -rv libhello.a hello1.o hello2.o hello3.o
ar -qv libhello.a hello1.o hello2.o hello3.o
如果libhello.a不存在则创建该库文件。如果存在则在不检查相同成员的情况下
将新的成员添加到末尾。
2.2.2 查看库文件中的所有模块。
ar -t libhello.a
依次列出库文件中所有模块成员,显示次序是根据添加模块次序。
2.2.3 删除库文件中的模块。
ar -dv libhello.a hello3.o
将模块hello3.o在库文件中删除。
2.2.4 将库文件中指定的模块取出来。
ar -xv libhello.a hello1.o
将库模块hello1.o释放到当前文件夹下,不会删除库文件中的该模块。
2.2.5 在指定的模块后面插入新的成员。
ar -ra hello2.o libhello.a hello3.o
将模块hello2.o插入到库文件libhello.a中的hello3.o后面。
2.2.6 更新库中的模块。
ar -ru libhello.a hello3.o
如果libhello.a库中没有hello3.o将其添加到库末尾。
如果有的话将替换之。
三、如何使用库文件。
3.1 静态库文件的命名。 静态函数库命名规则: lib*.a.*, 第一个"*"为库real name, 第二个"*"为库的主版本号和一个发行版本号(可选). 如果某个静态链接库不符合此格式,则LINUX的链接库自动装入程序 将搜索不到此链接库,其它程序也无法共享之.
3.2 在编译的时候将相应的库文件链接上即可。
例如
gcc main.c -L. -lhello.a
注意:在链接库文件时,库文件的名字要除掉lib。
在使用库文件时,最直接的方式就是直接将其加到编译文件里面去。
例如:
gcc -g -o readAD readAD.c ../lib/libxysqlite.a
四,对库文件的理解。
现在我觉得库文件的设计是开发模块化的一个体现。在开发的过程中,
每个人负责一个模块,每个模块都有很多个函数,将这些函数都打包成库函数。
到时候别人就调用你的库函数即可。
简单点的静态库的制作很容易。就是将起编译成.o文件后,对.o文件直接
打包成库函数。
例如:
ar crs libxysqlite.a libxysqlite.o
在libxysqlite.c中写个用来测试的main函数,编译的时候将其注释掉。
如果觉得自己写的函数没什么问题可以不用测试。
c Create the archive.
r Insert the files member... into archive (with replacement)
s Write an object-file index into the archive
更多的参数理解可以去
man ar
1.1 库文件。库文件实际上是使用共享程序代码的一种方式。库文件分为静态库和动态库。linux下静态库文件的后缀为.a 动态库的后缀为.so。 windows下的静态库文件的后缀为.lib。动态库文件的后缀为.dll。
1.2 静态库。程序编译一般需经预处理、编译、汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接 器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有 多份冗余拷贝。
1.3动态库。动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的复本,因此节省了很多内存。
二、如何使用ar命令创建静态库文件。
2.1 ar 对应的英文是 archive ['ɑ:kaiv] 归档的意思。.a,是静态库,是一个或多个.o文件"打包"(ar)在一起,用于静态链接。(一个.o文件可以有多个函数)
2.2 ar的使用方法。
2.2.1创建一个静态库文件。
ar -rv libhello.a hello1.o hello2.o hello3.o
ar -qv libhello.a hello1.o hello2.o hello3.o
如果libhello.a不存在则创建该库文件。如果存在则在不检查相同成员的情况下
将新的成员添加到末尾。
2.2.2 查看库文件中的所有模块。
ar -t libhello.a
依次列出库文件中所有模块成员,显示次序是根据添加模块次序。
2.2.3 删除库文件中的模块。
ar -dv libhello.a hello3.o
将模块hello3.o在库文件中删除。
2.2.4 将库文件中指定的模块取出来。
ar -xv libhello.a hello1.o
将库模块hello1.o释放到当前文件夹下,不会删除库文件中的该模块。
2.2.5 在指定的模块后面插入新的成员。
ar -ra hello2.o libhello.a hello3.o
将模块hello2.o插入到库文件libhello.a中的hello3.o后面。
2.2.6 更新库中的模块。
ar -ru libhello.a hello3.o
如果libhello.a库中没有hello3.o将其添加到库末尾。
如果有的话将替换之。
三、如何使用库文件。
3.1 静态库文件的命名。 静态函数库命名规则: lib*.a.*, 第一个"*"为库real name, 第二个"*"为库的主版本号和一个发行版本号(可选). 如果某个静态链接库不符合此格式,则LINUX的链接库自动装入程序 将搜索不到此链接库,其它程序也无法共享之.
3.2 在编译的时候将相应的库文件链接上即可。
例如
gcc main.c -L. -lhello.a
注意:在链接库文件时,库文件的名字要除掉lib。
在使用库文件时,最直接的方式就是直接将其加到编译文件里面去。
例如:
gcc -g -o readAD readAD.c ../lib/libxysqlite.a
四,对库文件的理解。
现在我觉得库文件的设计是开发模块化的一个体现。在开发的过程中,
每个人负责一个模块,每个模块都有很多个函数,将这些函数都打包成库函数。
到时候别人就调用你的库函数即可。
简单点的静态库的制作很容易。就是将起编译成.o文件后,对.o文件直接
打包成库函数。
例如:
ar crs libxysqlite.a libxysqlite.o
在libxysqlite.c中写个用来测试的main函数,编译的时候将其注释掉。
如果觉得自己写的函数没什么问题可以不用测试。
c Create the archive.
r Insert the files member... into archive (with replacement)
s Write an object-file index into the archive
更多的参数理解可以去
man ar
0 0
- linux下如何创建库文件
- linux下如何创建库文件
- Linux下创建库文件
- Linux下库文件学习(三)如何创建和使用库文件
- linux下如何创建固定大小的文件
- Linux Ubuntu 下如何创建,编辑和运行*.tcl文件
- Linux下创建脚本文件
- linux proc下创建文件
- linux下创建c文件
- linux下创建大文件
- Linux 下创建修改文件
- linux sysfs下创建文件
- linux 下如何给一个普通用户有在指定目录下有创建文件的权限
- linux下如何锁文件
- Linux下如何运行文件
- Linux下如何打包文件
- Linux下如何解压文件
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件
- 二维图形的几何变换
- 结构-02. 有理数加法(15)
- 安卓之全局变量在自定义类里的使用
- Linux makefile 教程 非常详细,且易懂
- 机器学习-R-特征选择
- linux下如何创建库文件
- Dancing Link基础题2
- 参加蓝桥杯感受
- https://leetcode.com/problems/string-to-integer-atoi/
- shell脚本if case for while语句小例子
- 根文件系统的制作
- Light OJ Aladdin and the Flying Carpet(约数个数)
- Android中Service的意义及用法
- 第一次写——ACM