linux下库文件有两种:一是静态库文件,以.a为后缀的文件。二是动态库文件,以.so为后缀的文件。其二者主要区别在于静态库是在编译时加载,而动态库是在运行时加载。
关于静态库文件使用比较繁多,在makefile中的使用如下例:
LIBS = -L./ -L$(ROOTPATH)/lib/ \
-ltest
这里加载的静态库文件是libtest.a。
如果想要使用动态库中的接口函数,可以使用两种方法。
方法1:
extern "C" int testso1(param1,param2,...);
int testso1(param1,param2,...)
{
code:
return 0;
}
其他地方应用的时候需要利用
#include <dlfcn.h>
#include <stdio.h>
typedef int (*fun)(char *,int);
dp=dlopen("./libtestso.so",RTLD_LAZY);
pFunction=(fun)dlsym(dp,"testso1");
(*pFunction)(strCode,512);
方法2:
将需要的的接口函数放到一个头文件中声明,其他地方引用时只需包含磁头文件。makefile中需要写明.so文件的全称,及准确的路径。
通过对两种文件的比较,个人认为,方法1在c调用c++的方法时效果明显。方法2在c++调用c++中其他组件方法时效果很好。方便易行!