导航:首页 > 操作系统 > linuxar库

linuxar库

发布时间:2023-11-08 17:29:37

‘壹’ linux makefile&shell的一个问题

ar 命令是用来将若干 .o 文件打包成(静态)库文件。 按照习惯,库文件后缀名都是 .a

crv 分别是 ar 命令的三个参数,cr的意思是创建指定.a文件(如果不存在),并将.o文件加入到这个.a文件中。 v 的意思是让 ar 命令在执行的时候打印更多的提示信息。

ar crv abc.a $(OBJ) 就是将 abc.o 打包到库文件 abc.a 中的意思。

更多信息可以 man ar 来看到。

‘贰’ linux静态库怎么编译

linux库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so
libhello.a
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:
libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
ln
-s
libhello.so.1.0
libhello.so.1
ln
-s
libhello.so.1
libhello.so
动态库和静态库的区别:
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
两种库的编译产生方法:
第一步要把源代码编绎成目标代码。以下面的代码hello.c为例,生成hello库:
/*
hello.c
*/
#include
void
sayhello()
{
printf("hello,world\n");
}
用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:
gcc
-c
hello.c
-o
hello.o
1.连接成静态库
连接成静态库使用ar命令,其实ar是archive的意思
$ar
cqs
libhello.a
hello.o
2.连接成动态库
生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:
$gcc
-shared
-wl,-soname,libhello.so.1
-o
libhello.so.1.0
hello.o
另外再建立两个符号连接:
$ln
-s
libhello.so.1.0
libhello.so.1
$ln
-s
libhello.so.1
libhello.so
这样一个libhello的动态连接库就生成了。最重要的是传gcc
-shared
参数使其生成是动态库而不是普通执行程序。
-wl
表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有
soname名字的文件,%b

‘叁’ 求linux中ar命令的使用实例,要各个参数使用的实例,

下面给了你一片文章,很实用,不知道你是否处于这个阶段,如果是简单的ar命令的使用,在网上还是很好找的。

《linux ar 添加库到另一个库中》
http://hi..com/20065562/blog/item/1f91882553bf73084c088db7.html

‘肆’ linux环境下,静态库的依赖关系怎么查

创建静态库: ar -rcs test.a *.o 查看静态库: ar -tv test.a 解压静态库: ar -x test.a 查看程序依赖态库: readelf -a xxx|grep library :看面交叉程序hello执行依赖于两态库 rebi@ubuntu:~/test$ arm-none-linux-gnueabi-readelf -a hello|grep "library" 0x0000000依 (NEEDED) Shared library: [libgcc_s.so.依] 0x0000000依 (NEEDED) Shared library: [libc.so.陆] rebi@ubuntu:~/test$ 或者:readelf -l hello 即 nm xxx 查看符号 其T表示代码段U表示其定义所需要确保必须某.o或库定

‘伍’ linux下的静态库创建与查看,及如何查看某个可执行依赖于哪些动态库

创建静态库:
ar -rcs test.a *.o
查看静态库:
ar -tv test.a
解压静态库:
ar -x test.a

查看程序依赖的动态库:
readelf -a xxx|grep library
如:可以看到,下面的交叉程序hello执行依赖于如下两个动态库。
rebi@ubuntu:~/test$ arm-none-linux-gnueabi-readelf -a hello|grep "library"
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
rebi@ubuntu:~/test$

或者:readelf -l hello 即可。

nm xxx 查看符号
其中,T表示代码段,U表示在其它地方定义,所以需要确保必须在某个.o或库里被定义过。

‘陆’ 如何生成静态库和动态库

静态库

静态库的后缀是.a,它的产生分两步

Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表
Step 2.ar命令将很多.o转换成.a,成为静态库
动态库的后缀是.so,它由gcc加特定参数编译产生。具体方法参见后文实例。123123

在 GNU/Linux 系统中静态链接文件实际上就是多个 .o 文件的压缩包。假设我们有 cool.h cool.c 和 some.c 文件,要得到静态链接库 libcool.a。首先使用如下指令得到相应的 object 文件 cool.o 和 some.o:

gcc -c cool.c
gcc -c some.c1212

用这种方法生成的 object 文件称为 PDC 即位置相关代码(position-dependence code)。再使用如下指令可以得到静态链接文件 libcool.a:

ar -r libcool.a cool.o some.o
ranlib libcool.a1212

静态链接库 libcool.a 遵从 GNU/Linux 规定的静态链接库命名规范,必须是”libyour_library_name.a”

动态库

在 GNU/Linux 中动态链接文件,必需通过链接器 ld 生成。假设我们有 hot.c other.c 等文件要生成动态链接库 libhot.so 。首先使用如下指令得到相应的 object 文件 hot.o 和 some.o

gcc -fPIC -c hot.c
gcc -fPIC -c other.c1212

参数 -fPIC 指定生成的 object 文件为位置无关代码(position-independence code),只有 PIC 可以被用作生成动态链接库。然后使用如下指令得到动态库:

ld -Bshared -o libhot.so hot.o other.o11

或者可以使用编译器的ld wrapper:

gcc -shared -o libhot.so hot.o other.o11

也可以使用编译器直接生成动态库:

gcc -fPIC -shared -o libhot.so hot.c other.c11

这里选项 -shared 指示目标文件的类型是动态链接库,动态库的命名规范是”libyour_library_name.so”

阅读全文

与linuxar库相关的资料

热点内容
忘记密码解压视频 浏览:911
运城机场春运加密 浏览:287
安卓手机如何关闭app后台 浏览:154
安卓数字密码忘记怎么破解 浏览:252
pythonzmq模式 浏览:180
linux运行php网站 浏览:865
实验室无油压缩机 浏览:805
哪里可以免费看动画app 浏览:53
文本加密咋解 浏览:485
tomcat做服务器怎么设置 浏览:252
非对称加密会增大网络包吗 浏览:703
为什么不能编译c 浏览:261
数据服务器不能启动是什么意思 浏览:556
java以什么开头 浏览:820
苹果手机相册文件夹如何清理 浏览:405
服务器云电脑搭建教程 浏览:410
eco怎么搭建服务器 浏览:468
周转材料核算法 浏览:358
学nodejs还是php好 浏览:281
电信营业厅app怎么买q币 浏览:918