博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下的静态库和动态库 - yg2362 - C++博客
阅读量:5841 次
发布时间:2019-06-18

本文共 816 字,大约阅读时间需要 2 分钟。

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

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

我们有两个文件,hello.ctest.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.alibmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库

转载地址:http://opvcx.baihongyu.com/

你可能感兴趣的文章
OllyDBG 入门系列教学--让你瞬间成为破解高手
查看>>
Dubbo点滴(2)之集群容错
查看>>
检测不到兼容的键盘驱动程序
查看>>
listbox用法
查看>>
冲刺第九天 1.10 THU
查看>>
传值方式:ajax技术和普通传值方式
查看>>
Linux-网络连接-(VMware与CentOS)
查看>>
寻找链表相交节点
查看>>
linq 学习笔记之 Linq基本子句
查看>>
[Js]布局转换
查看>>
Java annotation 自定义注释@interface的用法
查看>>
Apache Spark 章节1
查看>>
Linux crontab定时执行任务
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
选择排序
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
前端基础之JavaScript
查看>>
自己动手做个智能小车(6)
查看>>
自己遇到的,曾未知道的知识点
查看>>