Linux学习之应用开发阶段(静态、动态库的制作)

言之者无罪,闻之者足以戒。 ——《诗序》

LInux操作系统支持的函数库:

1、静态库,后缀名:libxxx.a,在编译时就将库编译进可执行程序中。

优点:程序的运行环境中不需要外部的函数库。

缺点:可执行程序大

2、动态库,又称共享库,libxxx.so,在编译的时候不加载到可执行程序中,只在运行的时候才将库加载到可执行程序中。

优点:可执行程序小

缺点:程序的运行环境中必须提供相应的库

函数库目录:/lib    /usr/lib

 静态库的制作:
1)、生成目标文件:gcc   -c   -o   file.o  file.c

2)、静态函数库创建命令 ar

ar    -cr  -o  libfile.a    file.o

-c : create 的意思

-r : replace 的意思,表示当插入的模块file.o已经存在 libfile.a 中,则覆盖。反之ar 显示一个错误消息

操作静态库的实例:

情况1、如果从别处得到一个静态库libunknown.a,想知道其中包含哪些模块?

命令:ar  -t  libunknown.a

静态库的编译:gcc  -o  main    main.c   -L.  -lfile 编译main.c 就会把静态函数库整合进main。

其中:-L 指定静态函数库的位置供查找,注意L后面还有‘.’,表示静态函数库在本目录下查找

-l 则指定了静态函数库名,由于静态函数库的命名方式是libxxx.a,其中的ib和.a忽略

下面我们来看一下程序:

#include <stdio.h>
int main()
{
        int ret;
        int x,y;
        x=10;
        y=6;
        ret=sub(x,y);
        printf("ret=%d\n",ret);
        return 0;
}


int sub(int x,int y)
{
        return (x-y);
}

上面的程序是两个文件里面的内容:一个是main.c另一个是sub.c

动态库的制作:

1)、生成目标文件:gcc -c -o file.c

2)、gcc  -shared  -fpic  -o libfile.so file.o

-fpic:产生的位置与代码无关

-shared:生成共享库

用上述命令生成libaddsub.so动态函数库

gcc -o main main.c -L.  -lfile

此时还不能立即./main,因为在动态函数库使用时,会查找/usr/lib  /lib目录下的动态函数库,而此时我们生成的库不在里边。

第一种方法:

linaddsub.so 放到/usr/lib或/lib中去

第二种方法:

假设libfile.so在/hom/linux/file中;export LD_LIBRARY_PATH=/hom/linux/addsub: $LD_LIBRARY_PATH

第三种方法:

/etc/ld.so.conf文件里面加入我们生成的库的目录,里面存放的是链接器和加载器搜索共享库时检查的目录,默认是从/usr/lib    /lib

中读取的,所以想要顺利运行,可以把我们库的目录加入到这个文件中并执行命令:ldcongfig  /etc/ld.so.conf

到此为止静态函数库和动态函数库的制作就说完了,希望对你我都有一定的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值