本文共 1243 字,大约阅读时间需要 4 分钟。
最近了解了一下关于动态链接库的知识。
动态链接库按照一系列的命令就可以生成。linux下的.so文件。
1,.so到底是什么?
我们编出动态链接库,只需要用到的头文件和.so就可以使用其中的函数,实际上头文件也是为了让用户看一看,实际连头文件都不用。
简单来看,动态链接库就是.c,.cpp文件的集合,然后在调用的时候就需要一个接口头文件和头文件下的函数声明而已。这样我们就可以将动态链接库重复使用,不需要每次都定义重复的函数。
2.简单的动态链接库怎么使用?
这里我定义了test.c,test.h,main.c
test.c:
#include "test.h"
int func()
{
printf("hello");
return 0; }
test.h
#ifndef TESH_H
#define TESH_H
int func();
#endif
main.c
#include "tesh.h"
int main()
{
func();
}
好了,一个很简单的Hello ,
1. gcc –c –fpic test.c --> test.o
2. gcc –shared –fpic –o libtest.so test.o
3. gcc main.c –ltest
4. ldd查看路径,将新创建的.so导入not found的文件夹下就可以使用。
在这里要注意什么?第三步,将生成的.so投入使用的时候要注意将接口头文件留下来。
只需要头文件,和把.so放到-ltest可以找到的地方。
三,恶心的是链接库中的函数使用到了其他链接库的东西,具有了依赖关系怎么处理?
这里先学习了一些基础:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
在第一步时,要注意将有依赖关系的头文件以 -I 文件一,-I文件二的形式增加。才能生成.o
在第二步生成.so时,要将依赖的库都放在后面。
然后将生成的。so放到能够得到的目录下,ldd看看其他依赖库的位置放,这样就只需要接口头文件就可以编新程序调用这些接口了!
转载地址:https://islet.blog.csdn.net/article/details/78845683 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!