Linux静态库,共享库,计算机基础知识

news2024/11/24 10:38:33

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结尾;

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

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

相关文章

前端学习系列之html

目录 初识html 发展史 优势 W3C 标准 地址 格式 网页基本标签 标题标签 段落标签 换行标签 水平线标签 字体样式 注释和特殊符号 特殊符号 图像、超链接 图像 常见图像格式 格式 超链接 格式 重要属性 href&#xff1a;规定链接指向的页面的 URL target…

线上问题整理-ConcurrentModificationException异常

项目场景&#xff1a; 商品改价&#xff1a;商品改价中通过多线程批量处理经过 Lists.partition拆分的集合对象 问题描述 商品改价中通过多线程批量处理经过 Lists.partition拆分的集合对象&#xff0c;发现偶尔会报 java.util.ConcurrentModificationException: nullat jav…

Vue3 + Scss 实现主题切换效果

Vue3 Scss 实现主题切换效果 先给大家看一下主题切换的效果&#xff1a; 像这样的效果实现起来并不难&#xff0c;只是比较麻烦&#xff0c;目前我知道的有两种方式可以实现&#xff0c;分别是 CSS 变量、样式文件切换&#xff0c;下面是该效果的核心实现方法 CSS变量 给…

使用Docker compose方式安装Spug,并结合内网穿透实现远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

【数据结构初阶】单链表

各位读者老爷好&#xff0c;鼠鼠我又来了哈。鼠鼠我呀现在来基于C语言实现以下单链表&#xff0c;希望对你有所帮助&#xff01; 目录 1.链表的概念及结构 2.链表的分类 3.无头单向非循环链表的实现 3.1.单链表打印 3.2.单链表尾插 3.3.单链表头插 3.4.单链表尾删 3.5…

Idea空白目录自动折叠的问题

IDEA创建空白项目和文件夹会自动折叠的问题。 有时文件项目会自动折叠&#xff0c;折叠后&#xff0c;不仅不好找项目和文件&#xff0c;还容易造成特别低端的错误。 如图&#xff1a; 当我们要在example目录下创建文件时&#xff0c;很容易就在springgaopdemo下创建了。 因为…

正则表达式 通配符 awk文本处理工具

目录 什么是正则表达式 概念 正则表达式的结构 正则表达式的组成 元字符 元字符点&#xff08;.&#xff09; 代表字符. 点值表示点需要转义 \ r..t 代表r到t之间任意两个字符 过滤出小写 过滤出非小写 space空格 [[:space:]] 表示次数 位置锚定 例&#xff1a…

笔记十九*、选中高亮和嵌套路由使用

19.1 选中高亮 NavLink App.jsx import React from "react"; import {NavLink, useRoutes} from "react-router-dom"; import routes from "./routes/index.jsx"; import "./app.css"const App () > {const element useRoutes(…

“文件批量改名专家:轻松自定义重命名并智能导出文件信息“

在日常工作中&#xff0c;处理大量文件时&#xff0c;往往需要一款得力的文件批量改名工具来协助我们高效、有序地进行文件管理。今天&#xff0c;我要向大家介绍一款强大的文件批量改名工具&#xff0c;它不仅支持统一自定义重命名&#xff0c;还能将相关信息导出到表格中&…

一、Oceanbase基础

一、集群相关概念 集群&#xff1a;整个分布式数据库。Region&#xff1a;表示区域&#xff0c;是地域的逻辑概念&#xff0c;如1个城市&#xff0c;1个集群可以有多个Region&#xff0c;用于跨城市远 距离容灾。Zone&#xff1a;表示分区&#xff0c;是机房或机架的逻辑概念…

[PyTorch][chapter 1][李宏毅深度学习-AI 简介]

前言&#xff1a; 李宏毅深度学习从2017-2023的系列课程总结 内容 章节 强化学习 11 李宏毅机器学习 【2017】 40 李宏毅机器学习深度学习(完整版)国语 【2020】 119 李宏毅大佬的深度学习与机器学【2022】 90 李宏毅机器学习完整课程【2023】 43 总结 303 目录…

lenovo联想笔记本YogaPro 14s IRP8D 2023款(83BU)原装出厂Windows11预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1s7PcN-y8RyHSV7uJQzC5OQ?pwddy9y 提取码&#xff1a;dy9y 联想电脑原厂W11系统&#xff0c;自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16GB或以上的U盘…

百度手机浏览器关键词排名优化——提升关键词排名 开源百度小程序源码系统 附带完整的搭建教程

百度作为国内领先的搜索引擎&#xff0c;一直致力于为用户提供最优质的信息服务。在移动互联网时代&#xff0c;手机浏览器成为了用户获取信息的主要渠道。而小程序作为轻量级的应用程序&#xff0c;具有即用即走、无需下载等优势&#xff0c;越来越受到用户的青睐。然而&#…

C语言第三十四弹--矩形逆置

C语言实现矩阵逆置 逆置结果如图 思路&#xff1a;通过观察逆置结果&#xff0c;首先发现行数和列数都发生了调换。其次观察逆置前后数字对应的下标&#xff0c;逆置前数字对应下标为:[x][j] 逆置后数字对应下标为&#xff1a;[y][x]。综上&#xff0c;就可以实现矩阵逆置。 …

ChromeDriver最新版本下载与安装方法

关于ChromeDriver最新下载地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ 下载与安装 setp1&#xff1a;查看Chrome浏览器版本 首先&#xff0c;需要检查Chrome浏览器的版本。请按照以下步骤进行&#xff1a; 打开Chrome浏览器。 点击浏览器右上角…

设计模式—迪米特原则(LOD)

1.背景 1987年秋天由美国Northeastern University的Ian Holland提出&#xff0c;被UML的创始者之一Booch等普及。后来&#xff0c;因为在经典著作《 The Pragmatic Programmer》而广为人知。 2.概念 迪米特法则&#xff08;Law of Demeter&#xff09;又叫作最少知识原则&…

14 网关实战:网关聚合API文档

上节课介绍了网关层的认证鉴权,今天这节介绍一下网关层如何聚合API接口文文档。 为什么需要聚合API接口文档? 大型微服务系统模块众多,木谷博客系统就有9个,如果这些服务的接口地址没有一个统一,那么客户端将要保存每个服务的接口地址,这个肯定是不现实。 先来看一下A…

小航助学题库蓝桥杯题库stem选拔赛(22年3月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

Mo0n(月亮) MCGS触摸屏在野0day利用,强制卡死锁屏

项目:https://github.com/MartinxMax/Mo0n 后面还会不会在,我可就不知道了奥…还不收藏点赞关注 扫描存在漏洞的设备 #python3 Mo0n.py -scan 192.168.0.0/24 入侵锁屏 #python3 Mo0n.py -rhost 192.168.0.102 -lock 解锁 #python3 Mo0n.py -rhost 192.168.0.102 -unlock …

Jetpack Compose中适应性布局的新API

Jetpack Compose中适应性布局的新API 针对大屏幕优化的新组合件。 使用新的Material适应性布局&#xff0c;为手机、可折叠设备和平板电脑构建应用程序变得更加简单&#xff01;市场上各种不同尺寸的Android设备的存在挑战了构建应用程序时对屏幕尺寸的通常假设。开发者不应该…