预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

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

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

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

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

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

怎样创建Linux静态库和动态库怎样创建Linux静态库和动态库1.基本概念静态库:链接时,库与编译生成的.o文件一起打包到可执行文件中。linux/windows下扩展名分别为:.a/.lib动态库:链接时,不会打包到可执行文件中,执行时会动态的加载动态库。linux/windows下扩展名分别为:.so/.dll区别主要体现在:a、可维护性。合入更新。合入动态库的更新,只要替换库即可。但合入静态则需要重新链接,生成新的可执行程序,全量更新。环境依赖。若包含静态库,编译成功后不依赖环境。动态库则存在依赖关系,需要环境中存在对应的动态库。b、大小空间利用率。若依赖相同静态库,则存在多份拷贝。可执行文件大小。静态库文件较大。c、动态库可以实现进程之间的资源共享,因此也称为共享库。2.静态库的创建与使用静态库本质就是一组.o组成的压缩文件,扩展名为.a/.lib代码如下:ar-crvlibXXX.ammmm.onnnn.oXXX是库名,mmmm.onnnn.o是要打包的目标文件。crv参数,含义分别是c:donotwarnifthelibraryhadtobecreatedr:replaceexistingornewfile(s)intothearchivev:beverbose使用时,只需在代码中引入头文件,链接时,指定静态库的搜索路径(-L选项)和静态库名(不需要lib前缀和.a后缀,-l选项)。代码如下:g++test.cpp-L.。/StaticLibrary-lXXX3.动态库Window与Linux执行文件格式不同,在创建动态库的时候有一些差异。Windows下执行文件是PE格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的声明时需要有_declspec(dllexport)关键字。Linux下gcc编译的`执行文件默认是ELF格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。linux下动态库的命名格式同静态库,为libXXX.so格式。动态库的创建,使用编译器即可,不需要像静态库一样使用专门的打包工具。若要创建动态库,源码编译时添加-fPIC选项,链接时添加-shared选项。代码如下:g++-fPIC-shared-olibXXX.soxxx.cpp用法同静态库,代码如下:g++test.cpp-L.。/DynamicLibrary-lXXX只是需要设置下搜索路径。默认搜索路径:/lib/,/usr/lib。设置搜索路径:编辑/etc/ld.so.conf,设置搜索路径运行ldconfig,重建/etc/ld.so.cache文件。设置生效。4.相关工具ldd查看程序依赖的共享库(动态库)代码如下:gcc/g++参数-I(大写‘i’),-L(大写‘l’),-l(小写‘L’)1、-I(大写‘i’)头文件目录2、-L(大写‘l’)库目录3、-l(小写‘L’)库名大写是目录,小写是库。