动静态库详解

文章目录

  • 动静态库
    • 动态库
    • 静态库
    • 动静态链接

动静态库

LinuxWindows
动态库.so.dll
静态库.a.lib
动静态库的本质就是文件。

lld
ldd命令可以查看一个可执行程序所依赖的库文件

  • ldd code:查看code依赖的库文件

平台要支持开发,必须要提前在系统中安装,语言的标准头文件+库文件。

C语言标准库

C语言静态库

动态库

动态库是被所有人共享使用的,一旦缺失,依赖这个动态库的所有程序都不可以运行。
  • 动态库,在编译链接时不需要把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库。这样可以节省系统的开销。
  • 动态库,一般后缀名为.so
  • gcc在编译时默认使用动态库。

动态库优点

  • 节省资源,不会出现太多的重复资源。资源包括磁盘、内存、网络等资源

动态库缺点

  • 对库的依赖性较强,如果库丢失,则所有使用这个库的程序都无法运行。
  • 相较于静态库会有略微的性能问题,调用动态库会存在跳转调用的问题。

静态库

  • 静态库是指在编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时就不再需要库文件。
  • 静态库,一般后缀名为.a

静态库安装
默认是不安装静态库,只默认安装动态库

  • yum install -y glibc-static libstdc++-static
    centos7使用yum安装C/C++静态库的方式
    出现下面这种情况,代表安装成功:

静态库优点:

  • 不依赖库,可执行程序在同类型的平台中都可以直接运行

静态库缺点

  • 可执行程序体积比较大,比较浪费资源。资源包括:磁盘、内存、网络等资源。

动静态库的区别:静态库在链接时需要拷贝到源文件中,动态库不需要。
允许你拷贝的库就是静态库,允许你关联的库就是动态库。

动静态链接

动态链接必须存在动态库,静态链接必须存在静态库。

  • gcc默认是使用动态链接的。

动态链接

  • gcc -o mybin test.c
    使用test.c形成mybin可执行文件的时候,默认使用动态链接

静态链接

  • gcc -o mybin-static test.c -static
    使用test.c形成mybin-static可执行文件的时候,使用静态链接

查看可执行程序的动静态库详情

  • file a.out使用file命令查看可执行程序a.out的动静态库详情

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

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

相关文章

flutter书架形式格口的动态创建(行、列数,是否全选的配置)

根据传入的行列数创建不同格口数量的书架 左图:5行3列、右图:3行3列 代码 import package:jade/bean/experienceStation/ExpCellSpecsBean.dart; import package:jade/configs/PathConfig.dart; import package:jade/utils/DialogUtils.dart; import p…

基于SpringBoot+Vue的外卖点餐网站 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:12张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue html 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&…

K8s: 在Pod中将configmap数据注入容器

configMap 概述 文档: https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/ Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量 是一个存储键值对 key-value 对象的 创建一个可以包含多个键值对的 ConfigMap, 以下是:mul-c…

Java 笔试强训篇- Day1

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 点击消除 1.1 解题思路一 1.2 解题思路二 2.0 在两个数组中找出相同的数 2.1 解题思路 笔试强训说明:有一些题目提供不了原题。 1.0 点击消除 该题链…

Group Query Attention (GQA) 机制详解以及手动实现计算

Group Query Attention (GQA) 机制详解 1. GQA的定义 Grouped-Query Attention (GQA) 是对 Multi-Head Attention (MHA) 和 Multi-Query Attention (MQA) 的扩展。通过提供计算效率和模型表达能力之间的灵活权衡,实现了查询头的分组。GQA将查询头分成了G个组&#…

事务的传播行为介绍和事务失效

常用的就下图介绍的这两种,REQUIRED 支持当前事务,如果不存在,就新建一个,EQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务 同一个service中必须用代理对象调用,否则失效

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果,支持11240/秒吞吐量2.3、Jmeter…

java中MD5加密

MD5加密 MD5加密是不可逆的加密方式,A可以根据MD5加密转换成B,但是B不能再转换成A String passwordDigestUtils.md5DigestAsHex(password.getBytes());完成密码的加密

【情侣博客网站】

效果图 PC端 建塔教程 第一步:下载网站源码(在文章下方有下载链接) 第二步:上传到服务器或虚拟主机,解压。 第三步:这一步很关键,数据库进行连接,看图 admin/connect.php就是这…

[Android]Jetpack Compose设置颜色

在 Kotlin 和 Jetpack Compose 中设置颜色是一个非常直接的过程,涉及到使用 Color 类来定义和使用颜色。 Jetpack Compose 提供了多种方式来定义和应用颜色,包括预定义颜色、RGB 值、十六进制值等。下面是一些常用的设置颜色的方法: 1. 使用…

python-基础(4)-list

python专栏地址 上一篇:python-基础(3)-字符串操作 List结构 本节将学习以下内容 list初识list的操作 一、List初识 创建 通过[]/list([])创建 ,两者的区别可以参考python中用list和中括号创建列表有什么区别?(在创建时相同,但一个的实质时…

Spring Data Jpa的save方法更新未传值的字段被更新为空的处理方法

Spring Data Jpa的save()方法通过主键是否为空来判断insert或是update操作,但更新方法和以往使用的mybatis-plus存在一定的差异,特别记录处理方法。 Resourceprivate Dao dao;/*** 更新操作* param data 前端传入存在更新的字段值的对象*/public void up…

pat乙-1020月饼

贪心:既然有存货量一定,利润要最高; 这个贪心就在于我看“单价”最高,这个单价也是要把存货量算进去的,所以按“单价”排序,再遍历,优选选择“单价”最高的,不够的再补,…

el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面

问题描述 el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面 如图所示多写了一个,就会导致该有的页面显示不出来。

Python 天气预测

Python天气预测通常涉及到数据采集、数据预处理、选择和训练模型、以及预测和可视化等步骤。以下是使用Python进行天气预测的一般流程: 数据采集 使用爬虫技术从天气网站(如Weather Underground、中国天气网等)爬取历史天气数据&#xff0c…

my.cnf配置文件调优

mysql数据库的性能调优首先要考虑的就是表结构设计,一个糟糕的设计模式即使在性能强劲的服务器上运行时,也会表现得很差。与设计模式相似,查询语句也会影响mysql的性能,应该避免写出低效的sql查询语句。最后要考虑的就是参数优化,mysql数据库默认设置的性能非常差,只能起…

LeetCode 628. 三个数的最大乘积 java版

1. 官网: . - 力扣(LeetCode) 2. 题目: 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6示例 2&…

Java中的递归方法:初学者的简明指南

Java中的递归方法:初学者的简明指南 递归是编程中的一个重要概念,它指的是一个方法直接或间接地调用自身。递归方法在处理某些问题时,特别是那些可以分解为更小、更简单的子问题时,非常有用。虽然递归的概念初看起来可能有些复杂…

QEMU_v8搭建OP-TEE运行环境

文章目录 一、依赖下载二、设置网络三、安装下载四、运行OP-TEE 一、依赖下载 更新依赖包,下载一系列依赖。比如Python需要Python3.x版本,需要配置git的用户名和邮箱等。这里不详细展开了,很多博客都有涉及到。 二、设置网络 这一点非常重…

【nginx代理和tengine的启动-重启等命令】

在nginx成功启动后[任务管理器有nginx.exe进程],运行vue项目,在浏览器访问http://localhost:10001/,提示:访问拒绝(调试中network某些地址403); 解决方案: localhost改为ip&#xff…