io进程----库

news2024/11/16 1:25:38

目录

一丶定义

二丶分类

1.静态库

2.动态库

三丶静态库制作

四丶动态库制作

总结:

一丶定义

        当使用别人的函数时除了包含头文件以外还需要有库

        头文件:函数声明、结构体等类型定义、头文件、宏定义、其他头文件等
        库:把一些常用的函数的目标文件打包在一起,提供相应的函数接口,便于程序员使用。本质上来说库是一种可执行代码的二进制形式文件。
        由于windows和linux的本质不同,因此而这库的二进制是不兼容的。(Linux中的C运行库是glibc, 由GUN发布。)

二丶分类

静态库和动态库,本质的区别是代码被载入的时刻不同。

1.静态库

        静态库在程序编译时会被复制到目标代码中, 以.a结尾。

        优点:程序运行时将不再需要该静态库,运行时无需加载库,运行速度更快,可移植性好
        缺点:静态库中的代码复制到了程序中,因此体积较大;静态库升级后,程序需要重新编译链接。

2.动态库

        动态库是在程序运行时才被载入代码中。也叫共享库,以.so结尾。
        优点:程序在执行时加载动态库,代码体积小;程序升级更简单;不同应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
        缺点:运行速度慢,运行时还需要动态库的存在,移植性较差。

三丶静态库制作

        1.将源文件编译生成目标文件
                gcc -c fun.c -o fun.o
        2.创建静态库用ar命令,将多个.o生成.a
                ar crs libfun.a fun.o
        注意:静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a
        3. 测试使用静态库
                gcc main.c -L. -lfun
        注意:-L指定静态库的路径, -l指定库名
        执行: ./a.out

四丶动态库制作

1.用gcc来创建共享库
        gcc -fPIC -c fun.c -o fun.o //-fPIC创建与地址无关的编译程序        
         gcc -shared fun.o -o libmyfun.so //生成动态库
2.测试使用动态库
         sudo cp libmyfun.so /lib
        gcc main.c -lmyfun
        ./a.out : 可以正常编译通过,但是运行报错./a.out: error while loading shared libraries:         libmyfun.so: cannot open shared object file: No such file or directory
         原因:当加载动态库时,系统会默认从/lib或/usr/lib路径下查找库文件,所以不用-L加路径了,直接gcc main.c  -lmyfun就可以了

解决方法(有三种):

1.把库拷贝到/usr/lib和/lib目录下。(此方法编译时不需要指定库的路径)
2.在LD_LIBRARY_PATH环境变量中加上库所在路径。
       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.(终端关闭,环境变量就没在了)
3.添加/etc/ld.so.conf.d/*.conf文件。把库所在的路径加到文件末尾,并执行ldconfig刷新
sudo vi xx.conf
添加动态库存在的路径,如:/home/hq/work/lib

总结:

        静态库:编译阶段,体积大,移植性好,升级麻烦,以.a结尾。

        动态库: 运行阶段加载代码,体积小,移植性差,升级简单,以.so结尾
        可以看出静态库编译出来的程序体积大一些:

升级演示:改变制作成库的源文件,然后重新制作库文件
动态库只需要重新生成动态库,不需要重新编译连接库了

静态库升级需要重新编译:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 使用QQ邮箱的接收发送功能,入门级教程

进入qq邮箱主页面,点击账号 下滑找到POP3...如果没有开启,需要开启,开启后,点击管理服务 然后点击生成授权码 按照步骤执行完成后,会给你需要的授权码 1.拿到授权码后,导入相关依赖,和yml相关配…

基于STM32开发的智能家居温度控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化温度监测与显示风扇/加热器控制Wi-Fi通信与远程监控应用场景 家庭环境的智能温度管理办公楼的节能温控系统常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人们对生活质量…

OZON电子类目解封,OZON新品飙升榜

Ozon电子类目的解封对于商家来说是一个重要的机会,可以重新进入市场并恢复销售。 Ozon电子类目解封选品:m6z.cn/5H6fQR(复制浏览器打开) Top1 便携式音响 Портативная колонка Bluetooth с караоке м…

多意图指令识别项目调研及整理

多意图算法及专利调研整理 AGIF: An Adaptive Graph-Interactive Framework for Joint Multiple Intent Detection and Slot Filling 短文本多意图解析 https://zhuanlan.zhihu.com/p/405096922 多意图语义解析包括多意图发现MID(Multi-intent discovery&#xf…

搭建go开发环境

下载go软件压缩包 解压压缩包到D:/Program Files 验证是否安装成功 配置系统环境变量Path

甄选范文“论软件质量保证及其应用”,软考高级论文,系统架构设计师论文

论文真题 软件质量保证(Software Quality Assurance, SQA)是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动,这些活动贯穿于软件生产的整个生命周期。质量保证人员负责质量保证的计划、监督、记录、分析及报告工作,辅助软件开发人员得到高…

arthas源码刨析:arthas 命令粗谈 dashboard watch retransform (3)

文章目录 dashboardwatchretransform 前面介绍了 arthas 启动相关的代码并聊了聊怎么到一个 shellserver 的建立。 本篇我们来探讨一下几个使用频次非常高的命令是如何实现的。 在开始之前,我们先概要地了解一下 arthas 命令的几个思路。 自定义命令,普通…

【Hexo】hexo-butterfly主题添加非主站提示

本文首发于 ❄️慕雪的寒舍 说明 因为hexo可以很方便的在多个平台上免费部署,为了让自己的博客能uptime更久一段时间,很多老哥都和我一样,把自己的hexo博客在好多个平台上都部署了一份。 但是我一直想要一个功能,就是在别人访问…

可商用插画

可商用插画 https://www.88sheji.cn/favorites/free-illustration

5G+智慧工业园区解决方案

1. 智慧工业园区架构概览 智慧工业园区采用多层架构设计,包括展示层、应用层、服务层、数据层和安全保障体系。此架构利用云计算、物联网和移动通信技术,实现园区管理的数字化和智能化。 2. 园区大脑功能 园区大脑作为智慧园区的“中枢神经”&#xf…

校园招聘,在线测评包括哪些内容?

一年两次的校园招聘(秋招和春招),面对众多职业测评的时候,很多人都会觉得无从下手,从而在竞争中失利。根据实践中的情况来看,校园招聘时的测试其实不难,求职者提前准备,想通过在线测…

SLAM十四讲ch3课后习题

1.验证旋转矩阵是正交矩阵。 2.验证四元数旋转某个点后,结果是一个虚四元数(实部为零),所以仍然对应到一个三维空间点。 注意:目前市面上所有的博客都说旋转四元数的逆是共轭除以模的平方 ,这么算很正确但…

免费分享:2023甘肃省地质灾害点数据集(附下载方法)

滑坡,在一定自然条件下的斜坡上的十体或岩体在外界的影响和自身的作用下沿着一定的软弱面或带,发生以水平心移为主的变形现象。地面沉降又称为地面下沉或地陷,是在自然或人类工程的影响下,由于地下松散土层固结收缩压密作用&#…

无人机飞手培训考证,超视距大载重吊运组装训练全学就业有保障

关于无人机飞手培训考证,是否必须学习超视距飞行、大载重吊运以及组装训练以确保就业保障,这个问题涉及多个方面,以下是对各点的详细分析: 一、超视距飞行 必要性分析: 超视距飞行是无人机高级应用中的一个重要领域…

大模型备案全网最详细流程解读(附附件+重点解读)

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报流…

Cesium 全球视角 和 多方案镜头切换

一.切换镜头 镜头切换&#xff0c;在一个Pawn里的多个镜头。可以使用UE中World Settings里的玩家控制器中&#xff0c;默认的控制器行为会对当前开启的Camera组件进行激活处理。 谁激活谁就是主相机。 Cast<UCameraComponent>(m_childComponentMap[it.CameraName])-&g…

VLDB 2024丨与 TiDB 一起探索数据库学术前沿

VLDB 2024 将于2024年8月26日至8月30日在中国广州举行。VLDB 是数据库领域的顶级国际会议&#xff0c;旨在为数据管理、可扩展数据科学、数据库研究者、供应商、从业者、应用开发者和用户提供交流平台。 2024年的VLDB会议涵盖了数据管理、数据库架构、图形数据管理、数据隐私与…

切换JDK版本

JDK&#xff08;Java Development Kit&#xff09;是Java开发工具包&#xff0c;它包含了Java的开发环境和运行环境。JDK是整个Java的核心&#xff0c;包括了Java运行环境&#xff08;Java Runtime Environment, JRE&#xff09;、Java工具和Java基础的类库&#xff08;rt.jar&…

九、枚举和注解

文章目录 一、枚举介绍二、自定义类实现枚举三、enum关键字实现枚举3.1 enum案例3.2 enum关键字实现枚举注意事项3.3 enum常用方法说明3.4 enum实现接口 四、JDK内置的基本注解类型4.1 注解的理解4.2 基本的Annotation介绍4.3 Override4.4 Deprecated4.5 SuppressWarnings 五、…

【性能优化】:设计模式与技术方案解析(二)

引言 在 【性能优化】&#xff1a;探索系统瓶颈的根源&#xff08;一&#xff09;文章中&#xff0c;我们已经分析了手动结算的弊端和瓶颈&#xff0c;本文来分析下怎么优化系统性能。 需求分析 既然手动结算耗时费力易出错&#xff0c;那么能不能开发一个**程序自动化处理*…