linux静态链接库和动态链接库简单使用

    如果你编写过线程或者与POSIX通信方式相关的程序的时候,你可能在编译链接的时候出现编译错误的情况,这个时候你会在gcc后面加一个参数,-lpthread(对于线程相关的程序而言),其实这个就是一个静态链接库libpthread.a。
    链接库有两种:静态链接库和动态链接库。动态链接库的后缀名一般为.so,静态链接库的后缀名一般为.a。
静态链接库:
    对于静态的链接库,程序在链接的时候,会找出程序中出现的相关函数,并且把它拷贝到可执行文件中,由于这种拷贝是完全的,所以这种程序一旦链接成功,相应的静态库也就不需要了。
动态链接库:
    对于动态链接库来说,程序的可执行文件当中会留有一个它的标记,当程序运行到相应的标记的时候,就会调用相应的动态库。由于动态库节省空间,所以一般linux下面链接程序的时候都是默认的按照动态方式链接的。

下面是两个简单的例子,说明了在linux下面如何进行使用静态链接和动态链接。
静态库的简单使用:
(1)编写被调用的函数文件sum.c和sum.h
    • /*sum.c*/

    • int sum(int a, int b)
    • {
    •     return a+b;
    • }
    • /*sum.h*/
    • int sum(int a, int b);
(2)生成静态链接库
    • gcc -c sum.c
    • ar -rc libsum.a sum.o //静态链接库的命名方式一般为:lib+链接库文件名+.a
解释:其中ar命令是生成、更新静态库的一个命令。
(3)写测试程序并进行测试
    • #include <stdio.h>

    • int main()
    • {
    •     printf("%d\n", sum(8, 7));
    •     return 0;
    • }
编译链接并且执行
    • ^_^[sunny@sunny-laptop ~/DS/lib]81$ gcc testsum.c -/home/sunny/DS/lib libsum.a -o testsum
    • ^_^[sunny@sunny-laptop ~/DS/lib]82$ ./testsum
    • 15
    • ^_^[sunny@sunny-laptop ~/DS/lib]83$
解释:其中的-I(大i)参数是指定静态链接库所在的目录,同时也可以使用-L进行相应的指定。


动态库的简单使用:
(1)同上的(1)。
(2)生成动态链接库
    • gcc -fPIC -o libsum.o -c sum.c
    • gcc -shared -o libsum.so libsum.o
或者我们可以把这两条命令写成一条命令
  1. gcc -fPIC -shared -o libsum.so sum.c
(3)写测试程序并进行测试
测试程序同上。
测试过程:
    • ^_^[sunny@sunny-laptop ~/DS/lib]116$ gcc testsum.c -o testsum ./libsum.so
    • ^_^[sunny@sunny-laptop ~/DS/lib]117$ ./testsum
    • 15
    • ^_^[sunny@sunny-laptop ~/DS/lib]118$


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1745) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值