当前位置: 首页 > news >正文

Linux系统中的静态库和共享库,以及一些计算机的基础知识

目录

1.库文件

2.静态库

3.共享库

4.静态库与共享库的区别

5.计算机基础知识

6.进程的基础知识

7.主函数的三个参数


1.库文件

1).库文件
库是一组预先编译好的方法的集合;
Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64)
库的头文件放在/usr/include
2).库的分类
静态库:libxxx.a(命名规则)
共享库:libxxx.so(命名规则)

3).准备文件:

//add.c
int add(int x,int y)
{return x+y;
} //max.c
int max(int x,int y)
{return x>y?x:y;
} //main.c
#include <stdio.h>
#include "foo.h"
int main()
{int a=5,b=10;printf("a+b=%d\n",add(a,b));printf("max=%d\n",max(a,b));return 0;
} //foo.h
int add(int x,int y);
int max(int x,int y);

2.静态库

(1).静态库的生成及使用
1)先将需要生成库文件的所有.c文件编译成.o文件;(目标文件)
2)创建静态库(使用ar命令)
ar crv libxxx.a xxxx.o xxx.o
c:创建库
r:将方法添加到库中
v:显示过程

(2)静态库的使用
gcc -o main main.c   -L. -lxxx
-L:指定库的存储位置
-l:指定库的名称(不需要前面的lib和扩展名.a)

例如:gcc -o main main.c -L. -lfoo

(3).静态库的缺点:
当你同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多个副本.而且在程序文件自身中也有多份同样的副本,这将消耗大量宝贵的内存和磁盘空间;

3.共享库

(1)将所有的.c文件编译成目标文件.o
(2)将所有目标文件打包生成共享库:
gcc -shared -fPIC -o libxxx.so xxx.o xxx.o
(3)共享库的使用:
gcc -o main main.c -L路径 -l库名

共享库执行的时候会出错,找不到对应的共享文件:比如libfoo.so;

注意:共享库必须要放到标准路径下:
sudo mv libxxx.so /usr/lib
补充一个命令:
查看使用了那些共享库:ldd main

4.静态库与共享库的区别

共享库如果10个应用程序共享,那么磁盘上只有一份共享的库文件,而且运行加载时在内存中只加载了标记了的这一份库文件;
而静态库,就是这10个应用程序都包含了这个库文件,那么10份的库文件都放在磁盘上了(占用磁盘空间),而且运行加载的时候占用内存空间(10份库文件都要加载);
共享库便于升级.

静态库的好处是在目标机器上运行程序的时候,就不再依赖于这个机器的空间,因为已经将方法都包含进来了;而共享库就是只有一份共享,比较节省空间,但是坏处就是运行的时候,这个主机上必须有这个库文件,没有程序就会运行失败;

5.计算机基础知识

1.计算机组成五大部件:
(1) 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻辑运算,移位,比较等。
(2) 控制器 : 它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。
(3) 存储器 :存储程序和各种数据。
(4) 输入设备 :把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信息存储起来。
(5) 输出设备 : 把计算机机能识别的信息转换为人能识别的信息,进行呈现。

2.一台计算机可以抽象成下图:

CPU中包含控制器和运算器,内存就是存储器.I/O设备就是输入设备和输出设备,如:键盘,显示器,鼠标,硬盘,网卡;
3.系统总线
(1)数据总线:用来在各个功能部件中间传输数据,是双向传输总线;
(2)地址总线:用来指出数据总线上的源数据或目的数据在主存单元的地址或IO设备的地址;
(3)控制总线:由于各个连接在数据总线和地址总线的部件都是共享这两类总线的,那么
在某一时刻由谁来使用,就是控制总线负责完成的.
4.指令相关概念:
(1) 指令 : 是指示计算机执行某种操作的命令。一条指令通常由两部分构成:地址码和操作码。
(2) 程序 : 由一条一条的指令构成。
(3) 指令周期 : cpu 每取出并执行一条指令所需的全部时间称为指令周期。
(4) 指令系统 :计算机能够执行的全部指令的集合称为该计算机的指令系统。
(5) RISC :精简指令系统计算机。(Reduced Instruction Set Computer)
RISC技术是用20%的简单指令的组合来实现不常用的80%的那些指令功能,但这不意味着RISC技术就是简单地精简其指令集.在提高性能方面,RISC技术还采取了许多有效措施,最有效地方法就是减少执行地执行周期数.
(6) CISC :复杂指令系统计算机。(Complex Instruction Set Computer)
(计算机组成原理332页:关于精简指令系统计算机,复杂指令计算机)
(7) 程序与指令: 高级语言 汇编助记符 机器指令

6.进程的基础知识

1).进程:一个正在运行中的程序;
2).PCB:进程控制块,进程描述符(PID:进程唯一的标识符)
进程控制块是用一个结构体struct task_struct来实现;

<<操作系统精髓与设计原理第六版>>74页;

3).进程的状态:
就绪,阻塞,运行;

时间片轮转调度;

时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配
一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程
还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结
束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用
完它的时间片后,它被移到队列的末尾。

4).并发与并行

5).操作系统发展史:
操作系统:管理计算机上的软硬件资源,为用户提供一个交换的接口;
(1)串行处理;
(2)简单批处理;
(3)多道程序设计
(4)分时系统

<<从哲学层次上看操作系统>>第一篇第2章操作系统历史 19页;

<<操作系统精髓与设计原理>>第35页.

7.主函数的三个参数

1).主函数的三个参数的含义:

argc:主函数的参数个数

argv:主函数的参数内容

envp:环境变量;

2).演示代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[],char *envp[])
{  int i=0;printf("argc=%d\n",argc);// for(;i<argc;i++)for(;argv[i]!=NULL;i++){printf("argv[%d]=%s\n",i,argv[i]);}return 0;
}

gcc -o main main.c 
./main
./main hello 123
#观察运行结果思考argc和argv参数的含义;

3).环境变量

 for(i=0;envp[i]!=NULL;i++){printf("envp[%d]=%s\n",i,envp[i]);}

4).总结:

argc:传递给主函数的参数个数
argv:传递给主函数的参数列表,字符指针数组,给主函数传递的参数都是字符串;(以NULL结尾)
envp:继承的环境变量列表,以NULL结尾;

相关文章:

Linux系统中的静态库和共享库,以及一些计算机的基础知识

目录 1.库文件 2.静态库 3.共享库 4.静态库与共享库的区别 5.计算机基础知识 6.进程的基础知识 7.主函数的三个参数 1.库文件 1).库文件库是一组预先编译好的方法的集合;Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64)库的头文件放在/usr/include 2…...

商品管理图片更换实现

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.java1234.mapper.ProductMa…...

SDL2 加载图片

1.简介 在SDL中&#xff0c;本身只支持加载BMP格式的图片SDL_LoadBMP&#xff0c;如果想要加载别的格式图片&#xff0c;需要编译SDL_image库。 SDL_image库中IMG_Load和都是IMG_LoadTexture用于加载图片的函数&#xff0c;但是它们的使用方式和返回值有所不同。 IMG_Load和…...

监控和数据采集软件架构和详细设计

介绍 监控和数据采集软件通过提供实时监控、数据收集和分析功能&#xff0c;在各个行业中发挥着至关重要的作用。这些软件应用程序可帮助企业收集有价值的见解、优化流程并做出明智的决策。在本文中&#xff0c;我们将探讨监测和数据采集软件的软件架构、编程技术和详细设计规范…...

链动2+1模式系统开发之区域代理深度解析

区域代理的保护机制&#xff1a;在链动商城系统里设定的代理有唯一性&#xff0c;每个省只有一个省代&#xff0c;每个市只有一个市代&#xff0c;每个区县只有一个区县代。这样也是保护每个代理的收益权益。 区域代理包含的权益类别&#xff1a;购物奖励折扣&#xff1b;区域实…...

Amazon Bedrock | 大语言模型CLAUDE 2体验

这场生成式AI与大语言模型的饥饿游戏&#xff0c;亚马逊云科技也参与了进来。2023年&#xff0c;亚马逊云科技正式发布了 Amazon Bedrock&#xff0c;是客户使用基础模型构建和扩展生成式AI应用程序的最简单方法&#xff0c;为所有开发者降低使用门槛。在 Bedrock 上&#xff0…...

通讯协议学习之路(实践部分):IIC开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…...

『亚马逊云科技产品测评』活动征文|搭建带有“弱”图像处理功能的流媒体服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 mediamtx-1.3…...

正交矩阵的定义

对于n阶矩阵A&#xff0c;如果&#xff0c;其中为单位矩阵&#xff0c;为A的转置矩阵&#xff0c;那么就称A为正交矩阵。 对于正交矩阵&#xff0c; 对于正交矩阵&#xff0c;其列向量都是单位向量&#xff0c;行向量都是单位向量...

K8S集群etcd 某个节点数据不一致如何修复 —— 筑梦之路

背景说明 二进制方式安装的k8s集群&#xff0c;etcd集群有3个节点&#xff0c;某天有一台机器hang住了&#xff0c;无法远程ssh登陆&#xff0c;于是被管理员直接重启了&#xff0c;重启后发现k8s集群删除一个deployment应用&#xff0c;多次刷新一会有&#xff0c;一会没有&am…...

selenium/webdriver运行原理与机制

最近在看一些底层的东西。driver翻译过来是驱动&#xff0c;司机的意思。如果将webdriver比做成司机&#xff0c;竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色&#xff1a; 乘客&#xff1a;他/她告诉出租车司机去哪里&a…...

论文阅读[121]使用CAE+XGBoost从荧光光谱中检测和识别饮用水中的有机污染物

【论文基本信息】 标题&#xff1a;Detection and Identification of Organic Pollutants in Drinking Water from Fluorescence Spectra Based on Deep Learning Using Convolutional Autoencoder 标题译名&#xff1a;基于使用卷积自动编码器的深度学习&#xff0c;从荧光光谱…...

Juniper SRX PPPoE配置

直接上配置脚本 6号口接运营商进行拨号 ---------- set interfaces ge-0/0/6 unit 0 encapsulation ppp-over-ether set interfaces ge-0/0/6 description "Connect_to_Modem" set interfaces pp0 unit 0 pppoe-options underlying-interface ge-0/0/6.0 set inte…...

虚拟仪器软件结构VISA

1、什么是VISA VISA是虚拟仪器软件结构(Virtual Instrument Software Architectuere)的简称&#xff0c;是由VXI plug & play系统联盟所统一制定的I/O接口软件标准及其相关规范的总称。一般称这个I/O函数库为VISA库&#xff08;用于仪器编程的标准I/O函数库&#xff09;。…...

/etc/init.d/functions: Syntax error: “(“ unexpected (expecting “done“)

一.问题描述&#xff1a; ubuntu系统安装服务时报错&#xff1a; 二.问题解析&#xff1a; Ubuntu安装时默认使用dash&#xff0c;shell脚本命令失败&#xff0c;需要安装bash来运行&#xff0c;长期解决该问题就是重新配置dash 三:问题解决&#xff1a; sudo dpkg-reconfi…...

Google/微端/Amazon/IBM四个厂家在分布式里面提供的服务总结

1.背景 最近在复习分布式的课程&#xff0c;发现总有四家公司——Google/微端/Amazon/IBM绕不过去&#xff0c;而他们又开发了许许多多的服务和架构&#xff0c;需要去记忆&#xff0c;于是乎就整理了一下他们提供的服务 2.Google提供的服务 &#xff08;1&#xff09;GFS(Go…...

计网:第一章 概述

目录 1.1计算机网络在信息时代作用 1.2因特网概述 1.3三种交换方式 1.4计算机网络的定义和分类 1.5计算机网络的性能指标 1.6计算机网络的体系结构 基于湖科大教书匠b站计算机网络教学视频以及本校课程老师ppt 整合出的计算机网络学习笔记 根据文章目录&#xff0c;具体内…...

RT-DETR算法优化改进:新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

💡💡💡本文独家改进: 多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)代替RepC3进行使用; 2)MSCAAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.ht…...

基于遗传算法改进的GRNN多输入多输出回归预测,基于多目标遗传算法+GRNN的帕累托前沿求解,基于遗传工具箱调用GRNN模型的多目标求解

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 展望 完整代码下载链接:grnn多输入多输出训练测试,遗传算法改进grnn神经网络,NSGA-2多目标遗传算法,多目标遗传算法和grnn结合优化资源-CSDN文库 https://download.csdn.net/downloa…...

vue2按需导入Element(vite打包)

1.安装element 说明&#xff1a;-S是生产依赖。 npm install element-ui2 -S 2.安装babel-plugin-component 说明&#xff1a;-D是开发模式使用。 npm install babel-plugin-component -D 3. vite.config.js 说明&#xff1a;借助 babel-plugin-component &#xff0c;我们可…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

AWS vs 阿里云:功能、服务与性能对比指南

在云计算领域&#xff0c;Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商&#xff0c;各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5]&#xff0c;我将从功能、服务和性能三个方面进行结构化对比分析&#…...