欢迎来到天天文库
浏览记录
ID:19822227
大小:71.00 KB
页数:8页
时间:2018-10-06
《linux操作系统下动态库的编写与调用new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1. 用 c 语言写动态库:/* *libsthc.h *Declarationsforfunctionadd */#include"stdio.h"#include"stdlib.h"#include"stdarg.h" #ifdef__cplusplusextern"C"{#endifintadd(intx,inty); #ifdef__cplusplus}#endif /* *libsthc.c *Implementationoffunctionadddeclaredinlibsthc.h *inclanguage */#include"libsthc.h" intadd
2、(intx,inty){ returnx+y;} #makefilelibsthc.so:libsthc.o gcc-sharedlibsthc.o-lc-olibsthc.solibsthc.o:libsthc.clibsthc.h gcc-fPIC-clibsthc.c-olibsthc.oall:libsthc.soclean: rm-f*.o*.so make 完成后,会生成一个动态库,即 libsthc.so 。为了使其他程序也可以使用该动态库,需要将库文件 libsthc.so 拷贝到 /usr/lib 目录下 (
3、由于权限的问题,一般要以 root 的身分进行拷贝 ) ,为了使其他程序也可以使用该动态库,需要将头文件 libsthc.h 拷贝到 /usr/include 目录下 ( 由于权限的问题 , 一般要以 root 的身分进行拷贝 ) 。 1.1 用 c 语言静态方式调用动态库 libsthc.so :/* *ctest.c *Testingprogramforlibsthc.solibrary *inclanguange *by 玄机逸士*/#include"libsthc.h"intmain(void){ printf("%d",add(1,2));
4、 return0;} #makefile:ctest:ctest.o gccctest.o-lsthc-octestctest.o:ctest.c gcc-cctest.c-octest.oall:ctestclean: rm-f*.octest 1.2 用 c 语言动态方式调用动态库 libsthc.so :/*cdltest.c*/#include"stdio.h"#include"stdlib.h"#include"dlfcn.h" intmain(void){ void*handle; int(*fcn
5、)(intx,inty); constchar*errmsg; /*openthelibrary*/ handle=dlopen("libsthc.so",RTLD_NOW); if(handle==NULL) { fprintf(stderr,"Failedtoloadlibsthc.so:%s",dlerror()); return1; } dlerror(); //*
6、(void**)(&fcn)=dlsym(handle,"add"); //ok fcn=dlsym(handle,"add"); //ok if((errmsg=dlerror())!=NULL) { printf("%s",errmsg); return1; } printf("%d",fcn(1,5)); dl
7、close(handle); return0;} #makefile :cdltest:cdltest.o gcccdltest.o-ldl-lsthc-ocdltestcdltest.o:cdltest.c gcc-ccdltest.c-ocdltest.oall:cdltestclean: rm-f*.ocdltest 1.3 用 c++ 静
此文档下载收益归作者所有