欢迎来到天天文库
浏览记录
ID:40559359
大小:50.50 KB
页数:2页
时间:2019-08-04
《Linux下创建共享库的和示例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux下创建共享库的创建和使用当我们完成一个比较大的项目的时候,不可能将所有的源文件进行编译得到一个很大的可执行文件,这样做的话,不仅浪费大量的内存,同时也会给为维护、升级带来很多的麻烦。在Windows系统中我们使用动态链接库(DynamicLinkLibrary)解决,文件名通常是以.dll最为后缀。动态链接库是相对于静态库而言的,动态链接库中的函数是动态加载的,多个程序可以共享动态链接库中的代码,节省了程序的空间,提高了执行的效率。灵活性比较好,也有利于扩展。在Linux中有着类似的方法,通常我们称之为共享对象(Shar
2、edObject),文件一般是以so作为后缀名。下面我将以一个例子讲解Linux下共享库的创建和使用。一、在Linux下创建动态链接库(共享库)1.1、创建头文件add.h#ifndefADD_H_2012_07_10_#ifdefSHAREDint(*add)(inta,intb);#elseintadd(inta,intb);#endif#endif为了简单起见,在程序中只有一个add函数,在头文件进行了函数的原型申明。1.2、创建源文件add.c#include"add.h"intadd(inta,intb){return(
3、a+b);}在源文件中实现了add函数的功能。1.3、编译生成动态库当我们完成上面两个文件的编写,就可以进行编译了,其实编译生成动态库的方法相当的简单,只需要–shared命令就可以完成。命令为:gcc-oamain.c-ldl二、Linux下动态链接库的使用2.1、源文件的编写main.c#include"stdio.h"#include"dlfcn.h"#defineSHARED#include"add.h"#defineSOFILENAME"./add.so"intmain(){void*dp;char*err;printf
4、("Linux下的动态链接库示例");dp=dlopen(SOFILENAME,RTLD_LAZY);if(dp==NULL){printf("failedindlopen");return-1;}add=dlsym(dp,"add");printf("11+3=%d",add(11,3));dlclose(dp);return0;}在这段代码中,首先我们需要包含一个很重要的头文件dlfcn.h,在Windows下我们采用LoadLibray函数加载动态链接库,在Linux下对应的函数是dlopen,另外比较重要的函数
5、有dlsym、dlerror、dlclose…2.2、生成可执行文件生成可执行文件的命令为:gcc–oa.outmain.c-ldl三、可能遇到的常见问题3.1、makefile问题如果使用makefile,注意命令式以tab键开头的,否则会报错3.2、undefinedreferenceto‘dlopen’错误在命令中需要添加–ldl选项
此文档下载收益归作者所有