外贸网站有必要吗,wordpress 图片中文名称转为时间,WordPress关闭邮箱通知,房产公司网站模板目录
一、静态库
#xff08;1#xff09;静态库的优缺点#xff1a;
#xff08;2#xff09;Linux下静态库的创建和执行 1.直接编译编辑
2.指定路径和库名
3.用LIBRARY_PATH环境变量来配置路径
二、动态库
#xff08;1#xff09;动态库的优缺点
#xff…
目录
一、静态库
1静态库的优缺点
2Linux下静态库的创建和执行 1.直接编译编辑
2.指定路径和库名
3.用LIBRARY_PATH环境变量来配置路径
二、动态库
1动态库的优缺点
2Linux下动态库的创建和执行
三、动态库的动态加载
1dlopen
2dlsym
3dlclose
4dlerror
5辅助工具 在一个大的项目中通常都是多人协作开发的会产生许多的.c文件但是我们就会出现一些问题-----怎么把这些.c文件生成的二进制文件整合成一个可执行程序呢 我们有两种方法静态库和动态库
一、静态库
1静态库的优缺点 优点 1.静态库被打包到了应用程序中运行速度快因为不需要实时的链接库文件 2.发布的程序不需要提供静态库因为静态库的二进制文件已经被打包在了可执行程序中 3.保密性好静态库方式是将可执行程序发布出去不涉及源代码的发布
缺点 1.代码冗长用户需要下载很久 2.不利于维护和更新因为代码已经是固定的了而动态库是运行时跳转到该函数
2Linux下静态库的创建和执行 1.直接编译
用ar打包成静态库用gcc生成可执行程序 这里红色圈出来的都是LInux下创建静态库的几个关键点可以看到在没有.o文件的时候编译器是不能够将main.c变为可执行程序a.out的必须要依赖于静态库libAdd.a
2.指定路径和库名 如果静态库不在同一个目录下呢这个时候我们就需要用-l 和-L选项了。 其中-l选项后面跟的是静态库的库名掐头去尾只保留中间的部分 而-L选项后面跟的是该静态库的路径比如这里他就在当前目录下所以路径是. 3.用LIBRARY_PATH环境变量来配置路径 这里要注意一点我们直接使用是不行的因为配置的是自定义的环境变量只有bash可以使用但是gcc是bash的儿子所以不能使用需要将这个环境变量变成全局的才能让他的儿子使用于是我们就要用export将其转换为全局的环境变量。这时候才可以使用 二、动态库
1动态库的优缺点
优点 1.可执行程序文件体积小节省空间 2.由于是链接起来再使用的便于更新和维护
缺点 1.文件执行的相对速度比较慢 2.文件运行需要依赖于动态库如果动态库缺失则不能正常运行
可以看到动态库中没有把库中的二进制代码拷贝到调用处而是一个跳转的指针---链接器 这里的LD_LIBRARY_PATH环境变量是给链接器使用的能在运行时动态链接 2Linux下动态库的创建和执行 用gcc打包成动态库用gcc生成可执行程序
但是动态库的创建和静态库的使用方法是一样的都存在三种方式
1.直接编译
2.指定路径和库名
3.用LIBRARY_PATH来配置路径 如果直接运行a.out这个可执行程序会出现一个问题动态库是在程序执行的时候由链接器去完成函数间的跳转的怎么样让链接器去知道路径从而找到动态库呢 我们只需要配置LD_LIBRARY_PATH这个环境变量就可以了这样就可以告知链接器在执行的时候的动态库路径了 我们可以总结一下 三、动态库的动态加载 1dlopen 注意这里如果只给出了文件名而没有带目录则会根据LD_LIBRARY_PATH环境变量的值去搜索动态库
2dlsym 因为他的返回值是void*类型如果我们需要的函数不是这个类型呢
则先把这个函数的返回值强转成我们需要的类型再赋值给左边的函数指针 3dlclose 4dlerror 这个dlerror( )函数就好像我们c语言中的errno他随时记录的是最近一次发生错误的原因
5辅助工具