采用ar制作静态库

一、认识静态库

  1. 以.a作为后缀名,在Linux下一般命名为libxxx.a;
  2. 程序使用静态库时,连接器(ld)将整个libxxx.a的所有函数都复制到可执行文件中;

二、优缺点

优点:采用静态库时,编译成可执行文件后,运行时不依赖与该库。

缺点:可执行文件较大,且静态库有变化,可执行文件得重新生成。

三、如何创建和使用静态库

工具:ar,将目标文件.o打包成一个单独的静态库。

Linux下制作静态库的步骤:

  1. 编辑源代码文件(.c、.cpp)
  2. 通过gcc -c *.c 或折g++ -c *.cpp生成目标文件*.o
  3. 使用ar打包目标文件,生成静态库
  4. 针对静态库提供头文件(即静态库对外提供的服务接口等*.h文件)

ar命令的使用:

语法:ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...

参数:

 指令参数 

  -d  删除库文件中的成员文件

 -m  变更成员文件在库文件中的次序 

-p  显示库文件中的成员文件内容 

-q  将文件附加在库文件末端 

-r  将文件插入库文件中

-t  显示库文件中所包含的文件 

-x  自库文件中取出成员文件

选项参数

a<成员文件> 将文件插入库文件中指定的成员文件之后。

b<成员文件>  将文件插入库文件中指定的成员文件之前。

c  建立库文件。

f  为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入库文件中过长的成员文件名称。

i<成员文件>  将问家插入库文件中指定的成员文件之前。

o  保留库文件中文件的日期。

s  若库文件中包含了对象模式,可利用此参数建立备存文件的符号表。

S  不产生符号表。

u  只将日期较新文件插入库文件中。

v  程序执行时显示详细的信息。

V  显示版本信息。

四、栗子

test.h

int add(int a, int b);

test.cpp

#include "test.h"

int add(int a, int b)
{
    return (a + b);
}

编译:

[xy@xunye ar]$ g++ -c test.cpp 
[xy@xunye ar]$ ls
test.cpp  test.h  test.o

创建静态库:

[xy@xunye ar]$ ar rcs libtest.a *.o
[xy@xunye ar]$ ls
libtest.a  test.cpp  test.h  test.o

使用静态库:

main.cpp

#include "test.h"
#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
    cout << add(3, 2) << endl;

    return 0;
}

创建可执行文件:

[xy@xunye use_lib]$ ls
libtest.a  main.cpp  test.h
[xy@xunye use_lib]$ g++ -o main main.cpp -L. -ltest
[xy@xunye use_lib]$ ls
libtest.a  main  main.cpp  test.h
[xy@xunye use_lib]$ ./main 
5

说明:-L 指定g++查找静态库的路径;“.”表示在当前路径下查找

          -l 指定具体的库,其中lib和.a可以不用显示写出

【注】gcc或g++搜索库的顺序:先找动态库.so,如果找不到再找静态库.a。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值