Linux下的静态库和动态库 - yg2362 - C++博客

系统 2206 0

Linux下的静态库和动态库 - yg2362 - C++博客

1. 制作自己的动态库和静态库

linux 下动态库以 .so 结尾,静态库以 .a 结尾,它们都以 lib 开头,比如一个库名为 net, 那么它的全名应该是 libnet.so 或者 libnet.a

我们有两个文件, hello.c test.c ,下面是两个文件的内容

//hello.c

#include <stdio.h>

 

void my_lib_func()

{

printf("Library routine called\r\n");

}

 

//test.c

#include <stdio.h>

 

int main()

{

my_lib_func();

 

return 1;

}

 

test.c 调用了 hello.c 的方法,我们把 hello.c 封装成库文件。无论是静态库还是动态库,都是由 .o 文件组成,我们先把 gcc -c hello.c 生成 .o 文件

制作静态库

ar crv libmyhello.a hello.o, ar 是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库

 

 

可以看到已经有了Library routine called的结果,说明调用成功了。

下面我们删除 libmyhello.a, 看看程序是否还是运行正常

我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中

制作动态库

我们看见动态库 libmyhello.so 已经生成,下面继续使用

找不到库文件,这个时候我们把 so 文件拷贝到 /usr/lib 下面

运行成功

 

2. 动态库和静态库同时存在的调用规则

我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数 -l ,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。

我们同时存在 libmyhello.a libmyhello.so ,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候, gcc 会优先选择动态库

Linux下的静态库和动态库 - yg2362 - C++博客


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论