依赖静态库,编译生成动态库

    xiaoxiao2021-03-25  91

    如需转载请注明出处!

    直入主题,目标是依赖静态库,编译动态库,最终生成二进制文件。

    文件目录如下:

    文件内容组织:

    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

    转载请注明原文地址: https://ju.6miu.com/read-14883.html

    最新回复(0)