Linux下的静态库和动态库
2012-07-11 15:20
183 查看
1.制作自己的动态库和静态库
linux下动态库以.so结尾,静态库以.a结尾,它们都以lib开头,比如一个库名为net,那么它的全名应该是libnet.so或者libnet.a。
我们有两个文件,hello.c和test.c,下面是两个文件的内容
//hello.c
#include<stdio.h>
void my_lib_func()
{
printf("Libraryroutine called\r\n");
}
//test.c
#include<stdio.h>
int main()
{
my_lib_func();
return1;
}
test.c调用了hello.c的方法,我们把hello.c封装成库文件。无论是静态库还是动态库,都是由.o文件组成,我们先把gcc
-chello.c生成.o文件
制作静态库
ar crv libmyhello.a hello.o,ar是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库
可以看到已经有了Libraryroutine called的结果,说明调用成功了。
下面我们删除libmyhello.a,看看程序是否还是运行正常
我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中
制作动态库
我们看见动态库libmyhello.so已经生成,下面继续使用
找不到库文件,这个时候我们把so文件拷贝到/usr/lib下面
运行成功
2.动态库和静态库同时存在的调用规则
我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数-l,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。
我们同时存在libmyhello.a和libmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库
linux下动态库以.so结尾,静态库以.a结尾,它们都以lib开头,比如一个库名为net,那么它的全名应该是libnet.so或者libnet.a。
我们有两个文件,hello.c和test.c,下面是两个文件的内容
//hello.c
#include<stdio.h>
void my_lib_func()
{
printf("Libraryroutine called\r\n");
}
//test.c
#include<stdio.h>
int main()
{
my_lib_func();
return1;
}
test.c调用了hello.c的方法,我们把hello.c封装成库文件。无论是静态库还是动态库,都是由.o文件组成,我们先把gcc
-chello.c生成.o文件
制作静态库
ar crv libmyhello.a hello.o,ar是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库
可以看到已经有了Libraryroutine called的结果,说明调用成功了。
下面我们删除libmyhello.a,看看程序是否还是运行正常
我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中
制作动态库
我们看见动态库libmyhello.so已经生成,下面继续使用
找不到库文件,这个时候我们把so文件拷贝到/usr/lib下面
运行成功
2.动态库和静态库同时存在的调用规则
我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数-l,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。
我们同时存在libmyhello.a和libmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库
相关文章推荐
- gcc g++ Linux下动态库_静态库
- linux 动态库和静态库编译链接方法
- Linux下用gcc/g++生成静态库和动态库
- linux下的动态库与静态库
- linux 静态库和动态库的使用
- 关于Linux动态库与静态库的分析
- linux中编译静态库(.a)和动态库(.so)的基本方法_only you
- 静态库and动态库区别(Linux)
- Linux 静态库与动态库搜索路径设置
- linux中编译静态库(.a)和动态库(.so)的基本方法
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- Linux学习笔记7——linux中的静态库和动态库
- linux应用开发基础(一)GCC编译器、动态库、静态库使用
- linux下c/c++编译器和调试器以及静态库、动态库使用汇总
- [转载]linux 静态库和动态库的区别 (
- Linux下静态库和动态库的创建和使用
- 在Linux中创建静态库和动态库范例 (hello.c)
- linux下编程动态库和静态库编译使用
- Linux 如何生成静态库和动态库
- Linux-动态链接与静态链接对比(动态库和静态库)