Linux下的动态库以.so为后缀,在Linux下使用动态库一点入门步骤,以便以后能方便使用。
第一步:编写Linux程序库
文件1.动态库接口文件
//动态库接口文件getmaxlen.h
点击(此处)折叠或打开
#ifndef _GETMAXLEN_H_
#define_GETMAXLEN_H_
int getMaxLen(int*sel,intN);
#endif
文件2.动态库程序实现文件
//动态库程序实现文件getmaxlen.c
点击(此处)折叠或打开
#include"getmaxlen.h"
intgetMaxLen(int*sel,intN)
{
intn1=1,n2=1;
for(inti=1;i<N;i++)
{
if(sel[i]>sel[i-1])
{
n2++;
if(n2>n1)
{
n1=n2;
}
}
else
{
n2=1;
}
}
returnn1;
}
第二步:编译生成动态库
gccgetmaxlen.c–fPIC–shared–olibtest.so
由以上命令生成动态库libtest.so,为了不需要动态加载动态库,在命令时需以lib开头以.so为后缀。
–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
–shared:指明编译成动态库。
第三步:使用动态库
1.编译时使用动态库
文件1.动态库使用文件test.c
//使用动态库libtest.so,该文件名为test.c
点击(此处)折叠或打开
#include"getmaxlen.h"
intmain()
{
intSel[]={2,3,6,5,3,2,1,2,3,4,5,6,7,6,5};
intm;
m=getMaxLen(Sel,15);
printf("%d",m);
return0;
}
编译命令:
gcctest.c–L.–ltest–otest
–L:指明动态库所在的目录
-l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-ltest。
测试:
lddtest
ldd测试可执行文件所使用的动态库
编译时指定动态库加载路径命令:gcctest.c–L.–ltest-Wl,-rpath,./–otest