linux 动态库调用静态库

文件列表:

----show1.c

----show2.c

----show3.c

----test.c

文件关系:show1.c 和show2.c 生成libshow.a 静态库;show3.c 生成libshow3.so动态库,show3.c调用show1.c和show2.c的API;test.c调用show3.c的API。

文件内容如下:

文件1:show1.c

#include <stdio.h>

void show1(void)
{
    printf("show1\n");
}

文件2:show2.c

#include <stdio.h>

void show2(void)
{
    printf("show2\n");
}

文件3:show3.c

void show1(void);
void show2(void);

void show3(void)
{
    show1();
    show2();
}

文件4:test.c

#include "stdio.h"
void show3(void);
int main()
{
    show3();
    return 0;
}

生成静态库libshow.a:

$ gcc -c -o show1.o show1.c
$ gcc -c -o show2.o show2.c
$ ar -rv libshow.a show1.o show2.o

生成动态库libshow3.so:

$ gcc -shared -o libshow3.so show3.c  -lshow  -L ./

生成libshow3.so时需要链接libshow.a库,所以添加选项-lshow  -L ./

安装libshow.a 和 libshow3.so 到系统库目录,并更新链接文件。

$ cp libshow* /usr/local/lib/
# ldconfig

编译测试文件并测试:

$ gcc -o test test.c -lshow -lshow3 

# ./test
show1
show2

删除libshow.a后程序可执行:

# rm /usr/local/lib/libshow.a
# ldconfig
# ./test
show1
show2

删除libshow3.so后程序不可执行:

# rm /usr/local/lib/libshow3.so
# ldconfig
# ./test
./test: error while loading shared libraries: libshow3.so: cannot open shared object file: No such file or directory



附加:Linxu静态库链接顺序

平时经常遇到编译文件 -lxxx库时, 提示未定义xxxxx。然后你把各个库链接的顺序更换一下,编译就可以通过了,也一直没深究原因。今天查了一下。

比如说我们大家所熟知的libjpeg库他是依赖于libz库的,如果我们有两个库的静态库libjpeg.a 和 libz.a ,那么我们在编译程序时链接 jpeg库时,同时需要链接 libz库。顺序为:    -ljpeg -lz


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值