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++中其他組件方法時效果很好。方便易行!