龙空技术网

把静态库打包到动态库中

铁锈笔记 182

前言:

现时小伙伴们对“程序打包成动态库有什么好处”可能比较注意,看官们都需要分析一些“程序打包成动态库有什么好处”的相关内容。那么小编在网上搜集了一些有关“程序打包成动态库有什么好处””的相关资讯,希望你们能喜欢,咱们一起来了解一下吧!

有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 <stdio.h>int add(int a,int b){return a+b ;}//cat sub.c#include <stdio.h>int sub(int a,int b){return a-b ;}//同样有mul.c和div.c[zzz@localhost dynamic]$ cat head.h#include <stdio.h>int add(int,int);int sub(int,int);int mul(int,int);int div(int,int);[zzz@localhost dynamic]$ cat t.c#include <stdio.h>#include "head.h"int main(){printf("add 6+3 %d\n",add(6,3));printf("sub 6-3 %d\n",sub(6,3));printf("mul 6*3 %d\n",mul(6,3));printf("div 6/3 %d\n",div(6,3));return 0;}

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

[zzz@localhost dynamic]$ cat makefileall:g++ -c -fPIC add.c sub.c mul.c div.car rcs libadd.a add.oar 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.sog++ -shared sub.o -Wl,--whole-archive libmuldiv.a libadd.a -Wl,--no-whole-archive -o libadd_sub_mul_div.sog++ -o t t.c -Wl,-rpath=./ -L. -ladd_sub_mul_div

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

铁锈笔记

标签: #程序打包成动态库有什么好处