动静态库

news/2024/10/3 14:03:30/文章来源:https://www.cnblogs.com/zhudachang/p/18445644
  1. 静态库:
    文件扩展名:.a
    链接方式是在编译时候直接集成到可执行文件中。

  2. 动态库
    文件扩展名字:.so
    链接方式是在运行时,根据符号表查找动态库的位置

  3. 库文件:就是把多个“.o文件”打一个包,给对方提供一个库文件。
    使用ar命令生成静态库
    ar -rc libmymath.a add.o sub.o

  4. 交付库-》库文件.a .so +匹配的头文件都给别人。所谓的安装:本质就是拷贝

  5. 如果需要链接第三方的库,必须指明库名称!!!

gcc会默认指定c语言的标准库,g++会自动指定c++的标准库

库的名称是去掉前缀和后缀,比如libmymath.a 那么库的名字叫mymath,-lmymath

  1. gcc默认是动态库。

  2. 系统中,通过拷贝来实现安装。

  3. 动态库:
    生成动态库:对于每个.c文件需要 gcc -c -fPIC my_add.c 生成.o文件,然后使用 gcc -share -o lib my math.so my_add.o my_sub.o

运行动态链接的执行文件:与静态链接的可执行文件(gcc只需要在编译时候指明路径和文件名字)不同。
动态链接的路径指明方式是:

  • 修改环境变量中的动态库的路径:$LD_LIBRARY_PATH
  • 修改环境变量
  • 使用软链接在本地路径下生成一个新的文件,这样子也可以找到。

ncourses 库(第三方库)

  1. 静态库加载:
    虚拟地址空间,可执行程序在编译时候就考虑到虚拟地址。静态库加载进代码区。

  2. 动态库加载:动态库中的指定函数的地址,写入到我们的可执行程序中。动态库中函数只需要填入在库中的偏移量地址数。在可执行程序需要执行一个外部动态库的函数的时候,会把动态库加载进内存,通过页表映射到pcb中的共享区,那么只需要库在共享区的起始地址和函数在动态库的偏移量地址。就可以找到函数的代码了。

在内存中,就算有一百个可执行程序需要使用同一个动态库,那么这个动态库在内存中只会有一份,而且是通过映射的方式存在于可执行程序中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/807416.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 顺序容器大小操作 resize

▲ 《C++ Primer》 P314▲ 《C++ Primer》 P318

WPS Office安卓版(WPS Office国际版) v18.13 解锁高级版

WPS Office for Android是一款功能强大的安卓手机办公软件。 软件功能 1.支持多种办公文档,包括Word、Excel和PowerPoint等。2.多种视图模式,支持纯文本、Web视图、页面视图、阅读视图等不同视图。3.支持多种文档操作,如文档的新建、编辑、保存、打印、分享、拍照OCR等。4.…

常用电脑软件

title: 常用电脑软件 date: 2024-06-15 18:14:53 tags: 我 categories: 一些项目 提前 (为什么写)居无定所与使用设备的变动 顺便介绍一下自己使用的软件工作环境软件(使用软件的配置) node.js(JavaScript环境)https://nodejs.org/git (分布式版本控制软件)https://git…

ubuntu18安装ros

一、环境配置 我的环境:Ubuntu18.04+melodic Ubuntu对应的ROS版本:二、安装步骤 1.添加ROS软件源 输入命令: $ sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list2.添加密钥 输入…

基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上

本教程使用工具所使用的环境说明: 启动器开发工具:VS2022 启动器所用客户端技术:.NET 8 + WPF 启动器其他技术:DPAPI 启动器发布的可执行程序,系统要求:Windows 7以及以上,X64 如果需要本程序,可以在网盘获取。网盘地址:链接: https://pan.baidu.com/s/1QPstE5-1zPK-q…

wx推送

推送消息到wx基本代码 注意:import requests APPTOEKN = "AT_xxxxxxxxxxxxxxxxxxxxxxxxxx" UIDS = ["UID_xxxxxxxxxxxxxxxxxxxxx",]def send_message(msg,summary="test"):"""微信公众号推送发送消息:param msg: 要发送的内容:pa…

修改el-menu 样式

el-menu-item 修改el-menu项的高度 el-sub-menu 修改el-menu的下拉高度

矿山电子封条智能监管系统

矿山电子封条智能监管系统通过YOLOv7网络模型技术,矿山电子封条智能监管系统在通过在煤矿关键地点已经安装的摄像机,对矿井人数变化、生产作业状态、出入井人员等情况实时监测分析,发现煤矿人员作业及状态异常动态及时告警,自动将报警信息推送给后台系统,对矿山场景下人员…

高级语言程序设计第2次作业

打这个时忘了打return 0;运算时把/打成了打这个时没碰到问题因为忘了上下限是啥,所以随便打了一个比较大的数字p notation 不会打电脑警告是看了书才知道是\a无 一开始把浮点数换成了整数回答书上的问题: 系统处理整数上溢时,会从头再进行运算;若为浮点数上溢,则会进行中…