把静态库打包到动态库中

有add.c、sub.c、mul.c、div.c分别是加减乘除函数。

把mul.c和div.c编译为静态库libmuldiv.a,把add.c编译为静态库libadd.a

再把libmuldiv.a和libadd.a 连同sub.o一起编译为动态库 libadd_sub_mul_div.so

// cat add.c
#include 
int add(int a,int b){
return a+b ;
}
//cat sub.c
#include 
int sub(int a,int b){
return a-b ;
}
//同样有mul.c和div.c
[zzz@localhost dynamic]$ cat head.h
#include 
int add(int,int);
int sub(int,int);
int mul(int,int);
int div(int,int);

[zzz@localhost dynamic]$ cat t.c
#include 
#include "head.h"
int main(){
printf("add 6+3 %d
",add(6,3));
printf("sub 6-3 %d
",sub(6,3));
printf("mul 6*3 %d
",mul(6,3));
printf("div 6/3 %d
",div(6,3));
return 0;
}

下面示例展示如何把静态库编译到动态库中。用到-Wl,--whole-archive选项:

[zzz@localhost dynamic]$ cat makefile
all:
g++ -c -fPIC add.c sub.c mul.c div.c
ar rcs libadd.a add.o
ar rcs libmuldiv.a mul.o div.o
#g++ -shared -Wl,--whole-archive libmuldiv.a libadd.a -Wl,--no-whole-archive sub.o -o libadd_sub_mul_div.so
g++ -shared sub.o -Wl,--whole-archive libmuldiv.a libadd.a -Wl,--no-whole-archive -o libadd_sub_mul_div.so
g++ -o t t.c -Wl,-rpath=./ -L. -ladd_sub_mul_div

执行make,生成执行文件得到预期效果。

铁锈笔记

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章