加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:50:11 所属栏目:百科 来源:网络整理
导读:如需转载请注明出处! 直入主题,目标是依赖静态库,编译动态库,最终生成二进制文件。 文件目录如下: 文件内容组织: 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)


如需转载请注明出处!


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

文件目录如下:



文件内容组织:

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 = %dn",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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读