美文网首页
我使用过的Linux命令之ar - 创建静态库.a文件

我使用过的Linux命令之ar - 创建静态库.a文件

作者: 鹰击司马 | 来源:发表于2018-09-07 18:42 被阅读0次

用途说明

创建静态库.a文件。用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在makefile中,有时也会在shell脚 本中用到。关于Linux下的库文件、静态库、动态库以及怎样创建和使用等相关知识,参见本文后面的相关资料【3】《关于Linux静态库和动态库的分析》。

常用参数

格式:ar rcs libxxx.a xx1.o xx2.o

参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。【1】

参数c:创建一个库。不管库是否存在,都将创建。

参数s:创建目标文件索引,这在创建较大的库时能加快时间。(补充:如果不需要创建索引,可改成大写S参数;如果.a文件缺少索引,可以使用ranlib命令添加)

格式:ar t libxxx.a

显示库文件中有哪些目标文件,只显示名称。

格式:ar tv libxxx.a

显示库文件中有哪些目标文件,显示文件名、时间、大小等详细信息。

格式:nm -s libxxx.a

显示库文件中的索引表。

格式:ranlib libxxx.a

为库文件创建索引表。

使用示例

示例一 在shell脚本中使用

 OS=`uname -r`  
 ar rcs libhycu.a.$OS *.o  

示例二 在makefile中使用

 $(BIN1): $(BIN1_OBJS)  
 ar rcs $@ $^  

示例三 创建并使用静态库

第一步:编辑源文件,test.h test.c main.c。其中main.c文件中包含main函数,作为程序入口;test.c中包含main函数中需要用到的函数。

vi test.h test.c main.c

第二步:将test.c编译成目标文件。

gcc -c test.c

如果test.c无误,就会得到test.o这个目标文件。

第三步:由.o文件创建静态库。

ar rcs libtest.a test.o

第四步:在程序中使用静态库。

gcc -o main main.c -L. -ltest

因为是静态编译,生成的执行文件可以独立于.a文件运行。

第五步:执行。

./main

示例四 创建并使用动态库

第一步:编辑源文件,test.h test.c main.c。其中main.c文件中包含main函数,作为程序入口;test.c中包含main函数中需要用到的函数。

vi test.h test.c main.c

第二步:将test.c编译成目标文件。

gcc -c test.c

前面两步与创建静态库一致。

第三步:由.o文件创建动态库文件。

gcc -shared -fPIC -o libtest.so test.o

第四步:在程序中使用动态库。

gcc -o main main.c -L. -ltest

当静态库和动态库同名时, gcc命令将优先使用动态库。

第五步:执行。

LD_LIBRARY_PATH=. ./main

示例五 查看静态库中的文件

[root@node56 lib]# ar -t libhycu.a
base64.c.o
binbuf.c.o
cache.c.o
chunk.c.o
codec_a.c.o
...
xort.c.o
[root@node56 lib]#
[root@node56 lib]# ar -tv libhycu.a
rw-r--r-- 0/0 7220 Jul 29 19:18 2011 base64.c.o
rw-r--r-- 0/0 2752 Jul 29 19:18 2011 binbuf.c.o
rw-r--r-- 0/0 19768 Jul 29 19:18 2011 cache.c.o
...
rw-r--r-- 0/0 4580 Jul 29 19:18 2011 xort.c.o
[root@node56 lib]#

[root@node56 lib]# nm -s libhycu.a | less

Archive index:
Base64Enc in base64.c.o
GetBase64Value in base64.c.o
Base64Dec in base64.c.o
encode64 in base64.c.o
decode64 in base64.c.o
check64 in base64.c.o
test64 in base64.c.o
...
chunk_alloc in chunk.c.o
[root@node56 lib]#

相关文章

  • 编译命令

    创建静态库 创建动态库 ar命令 ar压缩目标文件,并对其进行编号和索引,形成静态库。同时也可以解压缩静态库,查看...

  • 我使用过的Linux命令之ar - 创建静态库.a文件

    用途说明 创建静态库.a文件。用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在make...

  • ar 命令

    ar 命令 用途说明 创建静态库.a文件 常用命令参数 格式:ar rcs libxxx.a xx1.o xx2....

  • Linux 常用命令三

    gcc ar AR命令可以对一个或者多个目标文件.o进行归档, 形成一个静态库.a文件。 命令格式 ar [-]{...

  • 如何用Linux静态库生成指南

    Linux上的静态库,其实是目标文件的归档文件。 在Linux上创建静态库的步骤如下: 1.写源文件,通过gcc ...

  • ar、ranlib、nm命令详解

    一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) 2 更新静态库 使...

  • Linux查看库信息

    ar : 创建静态库,插入,删除,列出和提取成员 strings : 列出文件中的所有可打印字符串 strip :...

  • Mongodb 部署服务器后台开启进程

    Linux 配置按照以下命令创建文件 上面创建了数据库的文件路径,log路径,以及配置文件:mongodb.con...

  • 【转】Linux 之创建、删除文件和文件夹命令

    转自Linux 学习之创建、删除文件和文件夹命令 创建文件夹【mkdir】 一、mkdir命令使用权限 二、mkd...

  • 20_链接过程简介

    关键词:静态链接、Linux下静态库的创建和使用、动态链接、 Linux下动态库的创建和使用 1. 问题 工程中的...

网友评论

      本文标题:我使用过的Linux命令之ar - 创建静态库.a文件

      本文链接:https://www.haomeiwen.com/subject/ogxhgftx.html