Linux操作系统下动态库的编写与调用.doc

上传人:asd****56 文档编号:70340959 上传时间:2023-01-19 格式:DOC 页数:8 大小:71KB
返回 下载 相关 举报
Linux操作系统下动态库的编写与调用.doc_第1页
第1页 / 共8页
Linux操作系统下动态库的编写与调用.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《Linux操作系统下动态库的编写与调用.doc》由会员分享,可在线阅读,更多相关《Linux操作系统下动态库的编写与调用.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1.用c语言写动态库:/* libsthc.h* Declarations for function add*/#include stdio.h#include stdlib.h#include stdarg.h#ifdef _cplusplusextern C#endifint add(int x, int y);#ifdef _cplusplus#endif/* libsthc.c* Implementation of function add declared in libsthc.h* in c language*/#include libsthc.hint add(int x, in

2、t y)return x + y;#makefilelibsthc.so:libsthc.ogcc -shared libsthc.o -lc -o libsthc.solibsthc.o:libsthc.c libsthc.hgcc -fPIC -c libsthc.c -o libsthc.oall:libsthc.soclean:rm -f *.o *.somake完成后,会生成一个动态库,即libsthc.so。为了使其他程序也可以使用该动态库,需要将库文件libsthc.so拷贝到/usr/lib目录下(由于权限的问题,一般要以root的身分进行拷贝),为了使其他程序也可以使用该动态

3、库,需要将头文件libsthc.h拷贝到/usr/include目录下(由于权限的问题,一般要以root的身分进行拷贝)。1.1用c语言静态方式调用动态库libsthc.so:/* ctest.c* Testing program for libsthc.so library* in c languange* by玄机逸士*/#include libsthc.hint main(void)printf(%dn, add(1, 2);return 0;#makefile:ctest:ctest.ogcc ctest.o -lsthc -o ctestctest.o:ctest.cgcc -c c

4、test.c -o ctest.oall:ctestclean:rm -f *.o ctest1.2用c语言动态方式调用动态库libsthc.so:/*cdltest.c*/#include stdio.h#include stdlib.h#include dlfcn.hint main(void)void *handle;int (*fcn)(int x, int y);const char *errmsg;/* open the library */handle = dlopen(libsthc.so, RTLD_NOW);if(handle = NULL)fprintf(stderr,

5、Failed to load libsthc.so: %sn, dlerror();return 1;dlerror();/*(void *)(&fcn) = dlsym(handle, add);/okfcn = dlsym(handle, add);/okif(errmsg = dlerror() != NULL)printf(%sn, errmsg);return 1;printf(%dn, fcn(1, 5);dlclose(handle);return 0;#makefile:cdltest:cdltest.ogcc cdltest.o -ldl -lsthc -o cdltestc

6、dltest.o:cdltest.cgcc -c cdltest.c -o cdltest.oall:cdltestclean:rm -f *.o cdltest1.3用c+静态方式调用动态库libsthc.so:/*cpptest.cc*/#include libsthc.husing namespace std;int main(void)printf(%dn, add(1, 2);return 0;#makefile:cpptest:cpptest.og+ cpptest.o o cpptest -lsthccpptest.o:cpptest.ccg+ -c cpptest.cc -Wn

7、o-deprecated -o cpptest.oall:cpptestclean:rm -f *.o cpptest1.4用c+动态方式调用动态库libsthc.so:/*cppdltest.cpp*/#include stdio.h#include stdlib.h#include dlfcn.hint main(void)void *handle;int (*fcn)(int x, int y);const char *errmsg;/* open the library */handle = dlopen(libsthc.so, RTLD_NOW);if(handle = NULL)f

8、printf(stderr, Failed to load libsthc.so: %sn, dlerror();return 1;dlerror();*(void *)(&fcn) = dlsym(handle, add);/ok/fcn = dlsym(handle, add);/not ok in c+if(errmsg = dlerror() != NULL)printf(%sn, errmsg);return 1;printf(%dn, fcn(1, 5);dlclose(handle);return 0;#makefilecppdltest:cppdltest.og+ cppdlt

9、est.o -ldl -lsthc -o cppdltestcppdltest.o:cppdltest.cppg+ -c cppdltest.cpp -o cppdltest.oall:cppdltestclean:rm -f *.o cppdltest2.用c+语言写动态库:/* libsthcpp.h* Declarations for function cppadd*/#include stdio.h#include stdlib.h#include stdarg.h#ifdef _cplusplusextern C#endifint cppadd(int x, int y);#ifde

10、f _cplusplus#endif/* libsthcpp.cpp* Implementation of function cppadd declared in libsthcpp.h* in c+ language*/#include libsthcpp.hint cppadd(int x, int y)return x + y;#makefilelibsthcpp.so:libsthcpp.og+ -g -shared -Wl libsthcpp.o -lc -o libsthcpp.solibsthcpp.o:libsthcpp.cc libsthcpp.hg+ -g -fPIC -c

11、 libsthcpp.cc -o libsthcpp.oall:libsthcpp.soclean:rm -f *.o *.somake完成后,会生成一个动态库,即libsthcpp.so。为了使其他程序也可以使用该动态库,需要将库文件libsthcpp.so拷贝到/usr/lib目录下(由于权限的问题,一般要以root的身分进行拷贝),为了使其他程序也可以使用该动态库,需要将头文件libsthcpp.h拷贝到/usr/include目录下(由于权限的问题,一般要以root的身分进行拷贝)。2.1用c语言静态方式调用动态库libsthcpp.so:/* ctest.c* Testing pro

12、gram for libsthcpp.so library* in c languange* by玄机逸士*/#include libsthcpp.hint main(void)printf(%dn, cppadd(1, 2);return 0;#makefilectest:ctest.ogcc ctest.o -lsthcpp -o ctestctest.o:ctest.cgcc -c ctest.c -o ctest.oall:ctestclean:rm -f *.o ctest2.2用c语言动态方式调用动态库libsthcpp.so:/*cdltest.c*/#include stdio

13、.h#include stdlib.h#include dlfcn.hint main(void)void *handle;int (*fcn)(int x, int y);const char *errmsg;/* open the library */handle = dlopen(libsthcpp.so, RTLD_NOW);if(handle = NULL)fprintf(stderr, Failed to load libsthc.so: %sn, dlerror();return 1;dlerror();/*(void *)(&fcn) = dlsym(handle, cppad

14、d);/ok in c and c+fcn = dlsym(handle, cppadd);/ok in c, but not in c+if(errmsg = dlerror() != NULL)printf(%sn, errmsg);return 1;printf(%dn, fcn(1, 5);dlclose(handle);return 0;#makefilecdltest:cdltest.ogcc cdltest.o -ldl -lsthcpp -o cdltestcdltest.o:cdltest.cgcc -c cdltest.c -o cdltest.oall:cdltestcl

15、ean:rm -f *.o cdltest2.3用c+语言静态方式调用动态库libsthcpp.so:/* cpptest.cpp* Testing program for libsthc.so library written in c language* in c+ languange* by玄机逸士*/#include libsthcpp.h#include iostream.hint main(void)cout cppadd(1, 2) endl;return 0;#makefilecpptest:cpptest.og+ cpptest.o -lsthcpp -o cpptestcpp

16、test.o:cpptest.cppg+ -c cpptest.cpp -Wno-deprecated -o cpptest.oall:cpptestclean:rm -f *.o cpptest2.4用c+语言动态方式调用动态库libsthcpp.so:/*cppdltest.cpp*/#include stdio.h#include stdlib.h#include dlfcn.hint main(void)void *handle;int (*fcn)(int x, int y);const char *errmsg;/* open the library */handle = dlop

17、en(libsthcpp.so, RTLD_NOW);if(handle = NULL)fprintf(stderr, Failed to load libsthc.so: %sn, dlerror();return 1;dlerror();*(void *)(&fcn) = dlsym(handle, cppadd);/ok in c and c+/fcn = dlsym(handle, cppadd);/ok in c, but not in c+if(errmsg = dlerror() != NULL)printf(%sn, errmsg);return 1;printf(%dn, fcn(1, 5);dlclose(handle);return 0;#makefilecppdltest:cppdltest.og+ cppdltest.o -ldl -lsthcpp -o cppdltestcppdltest.o:cppdltest.cppg+ -c cppdltest.cpp -o cppdltest.oall:cppdltestclean:rm -f *.o cppdltest

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁