首页 > 其他分享 >动态库静态库笔记

动态库静态库笔记

时间:2023-01-09 19:25:35浏览次数:35  
标签:文件 gcc 静态 笔记 so 参数 动态

命名

linux下,动态库以.so结尾,静态库以.a结尾
libxxx.a/libxxx.so
gcc链接这些库的时候使用的是该库的名字xxx而不是全称libxxx.a

静态库制作和使用

c静态库制作

gcc -c 命令处理.c文件生成.o文件,-c命令表示只编译不链接这些生成的.o文件
ar rcs 将各个.o文件打包成静态库
静态库需要一个.h头文件来提示内部包含什么函数

静态库的使用

比如在main.c中要使用该库中的函数
要在开头添加.h文件,声明可以使用的函数,想想stdio.h等c标准库也是这样用的
gcc编译main.c的时候, -I参数 include头文件所在目录, -L 参数添加静态库文件所在目录, -l 参数指示要使用库名称, -o 参数指定生成的可执行程序的文件名

动态库制作和使用

动态库的制作

gcc -c -fpic 生成位置无关的.o文件
gcc -shared a.o b.o -o libmyshare.so 生成myshare动态库,linux下动态库以so结尾

动态库的使用

同样添加.h文件声明可以使用的函数
gcc 命令编译main.c时, -I参数 include头文件所在目录, -L 参数添加静态库文件所在目录, -l 参数指示要使用的库名称,以上面的libmyshare.so为例,就是-lmyshare
这样动态库的信息就包含在生成的可执行程序中了,例如刚刚生成的可执行程序文件名为app,可以通过ldd命令list dynamic dependencies列出所有依赖的动态库

到这里还有最后一个值得注意的地方,这个时候执行app会报错,找不到libmyshare.so文件

动态库的特点是,在运行程序时,调用到动态库中的函数才会将动态库加载到内存中
那么运行时的操作系统如何找到动态库并加载到内存中?
对了,就是环境变量等一系列的默认位置,包括/lib /usr/lib等目录
所以还需要将动态库文件放在这些目录下,或者将库文件所在路径放在环境变量中,让操作系统知道位置,一些C的标准库也是通过动态的方式加载的

标签:文件,gcc,静态,笔记,so,参数,动态
From: https://www.cnblogs.com/lxzbky/p/17038299.html

相关文章

  • 学习笔记——Mybatis核心配置文件概述及根标签
    2023-01-09一、Mybatis核心配置文件概述及根标签1、核心配置文件的概述(即“mybatis-config.xml”)MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。2、......
  • ABB 800XA学习笔记3:windows server安装中文语言包
    这一篇我在新浪博客发表过,地址是windowsserver2016英文版安装中文语言包_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失办公室电脑上虚拟机里面安......
  • ABB 800XA学习笔记2:800XA实际安装过程
    这是我在新浪博客发表过的一篇学习笔记,地址是虚拟机安装ABB800XA-实际进度篇_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也发表一次,避免丢失前面一篇博客记录了操......
  • ABB 800XA学习笔记1:虚拟机安装800XA系统的准备
    这是我在新浪博客发表过的一个学习笔记,地址是虚拟机安装ABB800XA-操作系统准备篇_来自金沙江的小鱼_新浪博客(sina.com.cn)在博客园也记录一下,避免丢失。一直都说要自......
  • Redis 数据结构-简单动态字符串
    Redis数据结构-简单动态字符串 无边落木萧萧下,不尽长江滚滚来。 1、简介Redis之所以快主要得益于它的数据结构、操作内存数据库、单线程和多路I/O......
  • [概率论与数理统计]笔记:3.1 随机向量的分布
    第三章随机向量3.1随机向量的分布随机向量及其分布函数概念\(X_1,X_2,\cdots,X_n\)是\(n\)个随机向量,则\((X_1,X_2,\cdots,X_n)\)是一个\(n\)维随机向量。\(n\)元......
  • vue3 中动态绑定 img src 问题
    vite 官方默认的配置,如果资源文件在assets文件夹打包后会把图片名加上hash值,但是直接通过:src="imgSrc"方式引入并不会在打包的时候解析,导致开发环境可以正常引入,打包后......
  • Miller-Rabin算法学习笔记
    个人不是很理解Miller-Rabin算法的正确性,所以这篇东西可以图一乐(确定性判素性的方法都很慢,所以要考虑随机但是错误概率低的判素方法。首先有Fermat素性测试,即费马小定理......
  • 个人电子资料如何管理?个人电子档案用手机笔记软件保存更高效
    在数字化时代,很多时候我们携带纸质版的个人资料并不方便,当我们需要随时使用个人资料的时候,也许电子版的资料可以帮助解决我们的燃眉之急。与传统纸质的个人资料和档案相比......
  • MyBatis的动态SQL详解
    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。MyBatis中用于实现动态SQL的元素主要有:ifchoose(when,otherwise)trimwheresetforeach......