linux静态库调用静态库(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会优先选择动态库
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!