自己动手写linux静态库文件

一、概述

1、库文件分为动态库和静态库,在linux下动态库以.so结尾,静态库以.a结尾,但二者都是以lib开头。

2、动态库与静态库的区别在于:如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。

二、静态库的编写

静态库的编写有两种类型:

类型一:不带头文件的库

A.具体步骤:

a.编写函数代码

b.将A中所编写的函数编译生成目标文件,即.o文件。gcc编译命令为:gcc -c filename

c.利用ar命令对B所得的目标文件归档,生成静态库文件。注意:库文件的名字必须以lib开头,以.a结尾

B.示例程序文件

//mylib.c

#include<stdio.h>

void myLibFun()

{

printf("my static lib called\n");

}


//test.c

#Include<stdio.h>

int main()

{

myLibFun();

return 0;

}

C.静态库的生成与使用

1.生成目标文件

gcc -c mylib.c

得到一个mylib.o文件

2.用ar命令归档,格式为ar -rc <生成的档案文件名> <.o文件名列表>

ar -rc libtest.a mylib.o

执行完后会生成一个libtest.a文件

3.静态库文件的调用

编译目标文件,注意将静态库的搜索路径加到-L参数里面,把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。
gcc test.c -o test -L /home/origin -ltest 
此时就会生成一个名为test的可执行文件。

执行./test,输出:

my static lib called

成功了!


三.带头文件的静态库

基本上与上面的一样,但是会有一些区别(红色标注部分)

//mylib.h
void test();

 

//mylib.c 
#inlcude <stdio.h>

void myLibFun()

{

printf("my static lib called\n");

}


//test.c

#Include<stdio.h>

int main()

{

myLibFun();

return 0;

}

静态库的生成与使用:

gcc -c mylib.c

ar -rc libtest.a mylib.o

gcc test.c -o test -l /home/origin -L /home/origin -ltest  //静态库头文件的路径加到-I参数里面

./test

输出:my static lib called

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值