如需转载请注明出处!
直入主题,目标是依赖静态库,编译动态库,最终生成二进制文件。
文件目录如下:
add.c
- #include "add.h"
- int add(int a,int b) {
- int c = a + b;
- return c;
- }
add.h
- #ifndef __ADD__
- #define __ADD__
- int add(int a,int b);
- #endif
mymath.c
- #include "mymath.h"
- #include "add.h"
- int func_add(int a,int b) {
- int c = 0;
- c = add(a,b);
- return c;
- }
mymath.h
- #ifndef __MYMATH__
- #define __MYMATH__
- int func_add(int a,int b);
- #endif
main.c
- #include <stdio.h>
- #include "mymath.h"
- int main(int argc,char* argv[]) {
- int a = 1;
- int b = 2;
- int c = 0;
- c = func_add(a,b);
- printf("result = %d\n",c);
- return 0;
- }
接下来,我们执行编译链接步骤。
接着,我们按照传统编译生成动态库文件的编译链接方式依赖libadd.a生成libmymath.so,并通过nm查看生成结果:
可以看出来,并没有任何我们定义的函数信息。
我们给出解决方法:通过使用 -Wl,--whole-archive 和 -Wl,--no-whole-archive来将静态库发包成动态库:
可以看到,我们定义的func_add出现在符号表。
最后我们通过依赖libmymath.so编译生成可执行文件来测试结果:
参考引用:
http://stackoverflow.com/questions/7935421/linking-archives-a-into-shared-object-so