预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.用c语言写动态库: /* *libsthc.h *Declarationsforfunctionadd */ #include"stdio.h" #include"stdlib.h" #include"stdarg.h" #ifdef__cplusplus extern"C" { #endif intadd(intx,inty); #ifdef__cplusplus } #endif /* *libsthc.c *Implementationoffunctionadddeclaredinlibsthc.h *inclanguage */ #include"libsthc.h" intadd(intx,inty) { returnx+y; } #makefile libsthc.so:libsthc.o gcc-sharedlibsthc.o-lc-olibsthc.so libsthc.o:libsthc.clibsthc.h gcc-fPIC-clibsthc.c-olibsthc.o all:libsthc.so clean: rm-f*.o*.so make完成后,会生成一个动态库,即libsthc.so。为了使其他程序也可以使用该动态库,需要将库文件libsthc.so拷贝到/usr/lib目录下(由于权限的问题,一般要以root的身分进行拷贝),为了使其他程序也可以使用该动态库,需要将头文件libsthc.h拷贝到/usr/include目录下(由于权限的问题,一般要以root的身分进行拷贝)。 1.1用c语言静态方式调用动态库libsthc.so: /* *ctest.c *Testingprogramforlibsthc.solibrary *inclanguange *by玄机逸士 */ #include"libsthc.h" intmain(void) { printf("%d\n",add(1,2)); return0; } #makefile: ctest:ctest.o gccctest.o-lsthc-octest ctest.o:ctest.c gcc-cctest.c-octest.o all:ctest clean: 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)(intx,inty); constchar*errmsg; /*openthelibrary*/ handle=dlopen("libsthc.so",RTLD_NOW); if(handle==NULL) { fprintf(stderr,"Failedtoloadlibsthc.so:%s\n",dlerror()); return1; } dlerror(); //*(void**)(&fcn)=dlsym(handle,"add");//ok fcn=dlsym(handle,"add");//ok if((errmsg=dlerror())!=NULL) { printf("%s\n",errmsg); return1; } printf("%d\n",fcn(1,5)); dlclose(handle); return0; } #makefile: cdltest:cdltest.o gcccdltest.o-ldl-lsthc-ocdltest cdltest.o:cdltest.c gcc-ccdltest.c-ocdltest.o all:cdltest clean: rm-f*.ocdltest 1.3用c++静态方式调用动态库libsthc.so: /*cpptest.cc*/ #include"libsthc.h" usingnamespacestd; intmain(void) { printf("%d\n",add(1,2)); return0; } #makefile: cpptest:cpptest.o g++cpptest.o–ocpptest-lsthc cpptest.o:cpptest.cc g++-ccpptest.cc-Wno-deprecated-ocpptest.o all:cpptest clean: rm-f*.ocpptest 1.4用c++动态方式调用动态库libsthc.so: /*cppdltest.cpp*/ #include"stdio.h" #include"stdlib.h" #inc