Linux下编写简单的动态链接库

作者: Let it Be  来源: 博客园  发布时间:2011-10-24 10:57  阅读:5 次   原文链接   [收藏]  

(1)Linux下编写动态链接库。通常静态链接库是编译的时候和源文件一起编译生成可执行文件的。动态链接库则不是,它是一个已经编译好的文件(静态则不是),只有当程序运行的时候(但是编译的时候要将动态链接库的信息加载进来),它才去找动态链接库拿它想用的一些函数。而且动态链接库可以提高通用性,编写一个动态链接库可以让很多人一起用。有点类似类?

test_so.h

01#ifndef _TEST_SO_H
02#define _TEST_SO_H
03 
04#include <stdio.h>
05#include <stdlib.h>
06 
07void test_a();
08void test_b();
09void test_c();
10 
11#endif


test_a.c

1#include "test_so.h"
2 
3void test_a()
4{
5    printf("this is test_a()\n");
6}

test_b.c

1<span style="font-size: 13px;">#include "test_so.h"</span>
1<span style="font-size: 13px;">void test_b()
2{
3    printf("this is test_b()\n");
4}</span>


test_c.c

1#include "test_so.h"
2void test_c()
3{
4    printf("this is test_c()\n");
5}

  

然后将这些文件编译为动态链接库gcc test_a.c test_b.c test_c.c --shared -fPIC -o libtest.so,则生成libtest.so文件(它已经编译好了),和普通可执行程序不同,它并没有main()。

在看如何调用它

编写test.c

1#include "test_so.h"
2 
3int main(void)
4{
5    test_a();
6    test_b();
7    test_c();
8    return 0;
9}

gcc test.c -L . -ltest -o test ((-L .)表示动态链接库在本目录, (-ltest)表示动态链接库的名字为lib(test).so)。

然后通过ldd ./test查看有哪些动态链接库和可执行程序有关联。

结果发现libtest.so没有关联。

运行./test出现:

./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

也就是说找不到这个动态链接库,但是我们已经在编译test.c的时候加入路径了?

这时候修改LD_LIBRARY_PATH变量

1#vim ~/.bashrc
2添加:
3LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/home/xxx/Test
4export LD_LIBRARY_PATH
5退出以后
6#source ~/.bashrc


或者/etc/ld.so.conf添加动态链接库的路径。

1#vim /etc/ld.so.conf
2添加一行:/home/xxx/Test
3然后刷新一把
4#/sbin/ldconfig -v
5再编译执行成功。

  



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值