先说明一点,静态库文件是由多个目标文件打包而成的,在windows下静态库文件的后缀是.lib,而在linux下静态库文件的后缀是.a(a是archive的缩写,也就是文档文件)。

  废话少说,下面直接进入主题。

  1.创建两个c文件:addition.c 和 multiplication.c

addition.c

 //addition.c
int addition (int a ,int b)
{
int result;
result=a+b;
return result;
}

multiplication.c

 //multiplication.c
int multiplication
{
int result;
result=a*b;
return result;
}

  2.编译C文件得到.o目标文件

 $ gcc -c addition.c
$ gcc -c multiplication.c

其中选项 -c 是让gcc只把源码编译成.o文件。

接着在当前文件夹中就会发现多处了两个.o文件

 $ ls
addition.c multiplication.c addition.o multiplication.o

  3. 用ar命令来创建静态库文件

 $ ar cr libarith.a  addition.o multiplication.o

其中cr就是create的意思,这样就创建了一个libarith.a的静态库文件。

  4.写一个c程序来调用libarith.a库

在使用库文件之前要先建立一个头文件 header.h,它包含了库文件中实现了函数的声明。

 //header.h
#include<stdio.h>
int addition(int a,int b);
int multiplication(int a,int b);

然后创建一个c程序example.c来调用函数

 // example.c
#include "header.h"
int main()
{
int result;
result=addition(,);
printf("addition result is :%d\n",result);
result=multiplition(,);
printf("multiplication result is:%d\n",result);
return ;
}

编译example.c

 $ gcc example.c libarith.a -o example

选项 -o 后面的参数是指定编译器生成的可执行文件名,如果没有加 -o的话默认生成的可执行文件名是 a.out

运行可以行文件example

 $./example
addtion result is:
multiplication result is:

  5.查看库文件中的目标文件

 $ ar t libarith.a
addition.o
multiplition.o

如果想查看库文件中包含了哪些函数可以用 nm  libarith.a 查看,如果要查看可执行文件需要调用哪些库可以用 lld example 来查看。

 

  6.从库文件中提取目标文件

 $ mkdir file
$ cp libarith.a file/
$ cd file
$ ar x libarith.a
$ ls
addition.o
multiplition.o

  7.添加一个目标文件到库文件中

假设你已经有一个目标文件subtraction.o

 $ ar r libarith.a subtraction.o
$ ar t libarith.a
addition.o
multiplication.o
subtraction.o

如果库文件中已经存在了subtraction.o文件,则会用新的来覆盖原来旧的。

  8.删除库文件中指定的目标文件

 $ ar d libarith.a addition.o
$ ar t libarith.a
multiplication.o
subtraction.o

参考来源:http://www.thegeekstuff.com/2010/08/ar-command-examples/

Linux下创建、查看、提取和修改静态库(*.a)的更多相关文章

  1. linux下的C语言开发(静态库/动态库)

    动态链接库不是Linux独有的特性,在windows下面也存在这样的特性.一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的.和静态链接库 ...

  2. linux下创建和删除软、硬链接

    linux下创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制 ...

  3. linux下如何查看mysql、apache是否安装,并卸载

    --linux下如何查看mysql.apache是否安装,并卸载? http://blog.163.com/dengxiuhua126@126/blog/static/1186077720137311 ...

  4. Linux 下实时查看日志

    Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...

  5. linux下如何查看多核负载情况【转】

    最近服务器负载超荷,CPU的单个荷使用率到了百分之八九十,内存占用超大,让给检测性能,不给源码,只给一个+ -g编译生成的执行文件,Fuck!!! 1, 在linux下载了valgrind,使用val ...

  6. Linux下创建和删除用户

    在Linux下创建用户和删除用户,必须在root用户下,如果你当前不是用根用户登录,你可以打开终端,输入"su root"命令,再输入根口令,就可以进入root用户模式下,如下所示 ...

  7. linux下创建用户

    linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系 ...

  8. linux下创建用户并且限定用户主目录

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号 一方面可以帮助系统管理员对使用系统的用户进 ...

  9. 【搬运工】linux下创建用户(一)

    转载:http://www.cnblogs.com/ylan2009/articles/2321177.html linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个 ...

随机推荐

  1. CCDictionary&CCArray执行retain()重要点

    CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...

  2. mysql将一个库中表的某几个字段插入到另一个库中的表

    insert into dbname1.tablename1(filed1,filed2,filed3) select filed1,filed2,filed3from dbname2.tablena ...

  3. Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)

    前言:github对开发者而言无疑是个宝藏,但想利用它可不是件简单的事,用Android studio导入开源项目会遇到各种问题,今天我就以github上的一个图片轮播项目为例,解决导入过程中的常见问 ...

  4. vs2012加载EntityFrameWork框架,连接Oracel

    近日公司用到.net MVC框架做接口,需连接到Oracel数据库,从网上查阅了一些资料,当然,从咱们博客园获益匪浅.然后结合自己所做,把使用过程中遇到的一些问题,及如何解决的整理如下,方便查阅,也有 ...

  5. HTTP状态码(HTTP Status codes)简介

    HTTP可能大家都熟悉,就是超文本传输协议.浏览器通过HTTP与WEB Server通讯(也有一些其它软件比如IM使用HTTP协议传递数据),把我们的请求(HTTP Request)传递给服务器,服务 ...

  6. "float: left;" div 不换行显示

    <div id='p'> <div id='c1'> </div> <div id='c2'> </div> <div id='c3' ...

  7. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

    #define  MIN(A,B)   ((A)<=(B)?(A):(B))

  8. 多线程08-Callable和Future

    1.简介 Callable是一个接口,与Runnable类似,包含一个必须实现的call方法,可以启动为让另一个线程来执行,执行Callable可以得到一个Future对象 该对象可以监听Callab ...

  9. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  10. Linux系统下快速删除某个目录下大量文件

    不管是哪个操作系统,同一级目录存在太多的文件都是一件可怕的事情,不管是读取还是删除的时候. 一旦这种不幸的事情发生在你身上,而又不能完全把整个目录删掉怎么办呢? 你可以用 rm -f *.log 但是 ...