linux编译生成32位的库,Linux学习:03-动态库嵌套编译生成

多层动态库的嵌套实现

mul.c 生成->libmul.so库.

add.c调用mul.c生成libadd.so库.

main.c调用libadd.so库. 可以使用ldd和nm查看库的链接情况.

//

// Created by tinychan on 4/25/20.

//

#include "mul.h"

int add(int a,int b){

int result=mul(a,b);

return a+b+result;

}

//

// Created by tinychan on 4/25/20.

//

int mul(int a,int b){

return a*b;

}

#include

#include "add.h"

int main() {

int sum=add(1,2);

printf("HelloWorld!,%d\n",sum);

#ifdef DE_DEBUG

printf("DET_DEBUG\n");

#endif

return 0;

}

具体操作流程如下:

1.gcc -fPIC -c mul.c

2.gcc -shared -o libmul.so mul.o

得到libmul.so

3.gcc -fPIC -c add.c -I ./include

4. gcc -shared -o libadd.so add.o -I ./include/ -L ./ -lmul -Wl,-rpath /home/tinychan/Desktop/gccTest3/gccDynamic

注意: add.o 不能放在最后的位置, 否则生成的.so错误.

3和4可以合并成一步:

gcc -fPIC -shared add.c -o libadd.so -I ./include/ -L ./ -lmul

注意: -fPIC后面不能跟-c 否则错误.

必须加入-Wl,-rpath 或者配置环境变量,否则找不到动态库的路径.

tinychan@ubuntu:~/Desktop/gccTest3/gccDynamic$ ldd libadd.so

linux-vdso.so.1 (0x00007ffdfd5ef000)

libmul.so => /home/tinychan/Desktop/gccTest3/gccDynamic/libmul.so (0x00007feb62a5a000)

查看动态库使用情况如上.

tinychan@ubuntu:~/Desktop/gccTest3/gccDynamic$ gcc main.c -o app.out -I ./include/ -L ./ -ladd -Wl,-rpath /home/tinychan/Desktop/gccTest3/gccDynamic

tinychan@ubuntu:~/Desktop/gccTest3/gccDynamic$ ./app.out

HelloWorld!,5

OK,可以正常运行了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值