Linux Day05

news2025/1/15 16:36:52

一、库文件生成与使用

1.1库文件

头文件是方法的声明,不是方法的实现

方法的实现是在库,库是预先编译好的方法的集合即.o文件

Linux上的库分为静态库(libxxx.a)和共享库(libxxx.so)

库文件常存放在/lib或者/usr/lib

库对应的头文件一般放在/usr/include中

 

 1.2静态库

1.1.1 生成方法:

将所有的.c源文件编译成目标文件.o

将所有目标文件打包生成静态库,

ar cv libxxx.a xxx.o

由此可见头文件只有函数的声明,没有函数的实现

 直接调用会出错

需要使用   gcc -o main main.c -L. -lfoo

-L 指定库的存储路径     -L.   .表明是在当前所在位置
-l 指定库的名称(不需要前面的‘lib’和扩展名‘
.a’) 

 

成功运行

1.1.2删除静态库后能否正常运行可执行文件

答案是:可以

1.3共享库

1.2.1生成方法

第一步:先将需要生成库文件的所有“.c“文件编译成“ .o”文件

第二步:使用 gcc 命令将第一步编译的所有”.o”文件生成共享库 

第三步:使用共享库“libfoo.so”和“main.c”生成可执行文件的过程,其中 -L 指定库的
存储路径, -l 指定库的名称(不需要前面的‘lib’和扩展名‘.so’)

 

当我们运行可执行文件时发现不能通过,报错

是因为我们的共享库,main函数里面并没有包含Add,max的方法,只是标记我们要使用这个库里面的方法,并没有包含到main程序中,当我们运行时系统寻找共享库位置链接,而系统没有找见这个库所以出错了

 两种办法解决

第一种:将共享库剪切至/usr/lib

切换成管理员

 然后运行main可执行程序

 使用ldd查看就能发现系统可以找到这个共享库的位置了

第二种:通过设置环境变量”LD_LIBRARY_PATH”来指定加载库的路径

如果在库的存储路径 有同名的共享库和静态库,gcc 默认使用共享库。

1.1.2删除共享库后能否正常运行可执行文件

当我们使用管理员身份删除libfoo.so文件后执行可执行文件发现会报错

1.4、静态库和共享库的区别

静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
标记,在运行程序时,才动态加载
理论上共享库执行文件大小小于静态库的

二、主函数的三个参数

int main( int argc, char* argv[], char* envp[])
(1) argc 参数个数
(2) argv 参数内容
(3) envp 环境变量

在未传入任何参数,argc为1(当前程序的路径+名称), 参数内容是当前程序的名字

 当加入环境变量时

 

 增加一个环境变量

 

 

 

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

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

相关文章

【188】Java8利用AVL树实现Map

AVL树又被叫做平衡二叉搜索树、平衡二叉树。AVL是其发明者的首字母缩写。 这篇文章中,AVLTreeMap 类集成了 java.util.Map 接口,并利用 AVL 树结构实现了 Map 接口的所有方法。本文还给出了测试代码。 为什么要发明AVL树? 当我按照从小到大…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

将自己的网站免费发布到互联网上【无需公网IP】

将自己的网站免费发布到互联网上【无需公网IP】 文章目录 将自己的网站免费发布到互联网上【无需公网IP】将本地搭建的网站发布到互联网步骤 ↓1. 注册并安装cpolar客户端1.1 windows系统1.2 linux系统(支持一键自动安装脚本)2. 登录cpolar web UI管理界…

Gradio-YOLOv5-YOLOv7 搭建Web GUI

目录 0 相关资料:1 Gradio介绍2 环境搭建3 GradioYOLOv54 GradioYOLOv75 源码解释 0 相关资料: Gradio-YOLOv5-Det:https://gitee.com/CV_Lab/gradio_yolov5_det 【手把手带你实战YOLOv5-入门篇】YOLOv5 Gradio搭建Web GUI: https://www.bi…

一次某某云上的redis读超时排查经历

性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案。 问题背景 最近一两天线上老是偶现的redis读超时报警&#xf…

ChatGPT在工作中的七种用途

1. 用 ChatGPT 替代谷歌搜索引擎 工作时,你一天会访问几次搜索引擎?有了 ChatGPT,使用搜索引擎的频率可能大大下降。 据报道,谷歌这样的搜索引擎巨头,实际上很担心用户最终会把自己的搜索工具换成 ChatGPT。该公司针对…

KiCad各层简述

KiCad各层简述 KiCAD在Pcbnew中总计提供了32个铜层供导线走线(可覆铜),12个固定技术层(按照正反面分为6对),2个独立技术层,4个辅助层。在KiCad里Pcbnew的层描述中,F.代表电路板上层&…

机器学习笔记之优化算法(八)简单认识Wolfe Condition的收敛性证明

机器学习笔记之优化算法——简单认识Wolfe Condition收敛性证明 引言回顾: Wolfe \text{Wolfe} Wolfe准则准备工作推导条件介绍推导结论介绍 关于 Wolfe \text{Wolfe} Wolfe准则收敛性证明的推导过程 引言 上一节介绍了非精确搜索方法—— Wolfe \text{Wolfe} Wolf…

Letter of Acceptance 过期后,如何入境办学签?

很少会有同学遇到LoA过期时间之后入境办学签的问题,所以网上也很少有相关攻略。鉴于此,在联系了IRCC、学院办公室、研究生院和学校移民办公室之后,得到了最终答复。省流:在学校开个入学证明(Proof of Enrolment&#x…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

mybatis log插件

目前idea当中已经实施收费了 最近找了一个不收费的插件安装上重启一下就行了 点我下载提取码:sjc8

blender基础认识(选项开关、工具栏、视图等)

文章目录 引言一、大纲选项开关和保存启动文件1. 大纲选项1. 禁用选中2. 视图影藏3. 视图禁用4. 渲染禁用 2. 保存启动文件 二、工具栏和侧边栏1. 左侧工具栏2. 右侧工具栏 三、视图1. 视角2. 缩放3. 拖拽4. 摄像机视角5. 切换正交视图6. 局部视图7. 显示隐藏 四、添加删除物体…

在centos7.9安装tomcat8,并配置服务启动脚本,部署jpress应用

目录 一、简述静态网页和动态网页的区别 二、简述 Webl.0 和 Web2.0 的区别 三、 安装Tomcat8,配置服务启动脚本,部署jpress应用 3.1、Tomcat简介 3.2、安装Tomcat 3.2.1、配置环境 3.2.2、安装JDK 3.2.3、安装tomcat8 3.2.4、访问主页&#xff1…

go编译文件

1.编译go文件 go build [go文件]2.执行文件编译文件 ./demo [demo为go文件名称]

自然语言处理学习笔记(三)————HanLP安装与使用

目录 1.HanLP安装 2.HanLP使用 (1)预下载 (2)测试 (3)命令行 (4)测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装 HanLP的 Python接口由 pyhanlp包提供,其安装…

【深度学习】在 MNIST实现自动编码器实践教程

一、说明 自动编码器是一种无监督学习的神经网络模型,主要用于降维或特征提取。常见的自动编码器包括基本的单层自动编码器、深度自动编码器、卷积自动编码器和变分自动编码器等。 其中,基本的单层自动编码器由一个编码器和一个解码器组成,编…

OLED透明屏安装指南:准备工作、步骤和注意事项

随着科技的不断发展,OLED透明屏作为一种新型的显示技术,逐渐得到了广泛的应用。 OLED透明屏具有高透明度、高亮度和广视角等优势,可以实现透明显示效果,为商业展示、户外广告等领域提供了更广阔的空间。 然而,正确的…

Qt实现可伸缩的侧边工具栏(鼠标悬浮控制伸缩栏)

Qt实现可伸缩的侧边工具栏 一直在网上找,发现大多的实现方案都是用一个按钮,按下控制侧边栏的伸缩,但是我想要实现鼠标悬浮在侧边栏的时候就伸出,移开就收缩的功能,也没找到好的参考,所以决定自己实现一个…

Apache Kafka Learning

一、Kafka Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以收集并处理用户在网站中的所有动作流数据以及物联网设备的采样信息。 Apache Kafka是Apache软件基金会的开源的流…

Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析

文章目录 一、Quartz 基本介绍二、Quartz Java 编程1、文档2、引入依赖3、入门案例4、默认配置文件 三、Quartz 重要组件1、Quartz架构体系2、JobDetail3、Trigger(1)代码实例(2)SimpleTrigger(3)CalendarI…