Linux中静态库和动态库的使用

库的概念

  • 介绍:
    库是一个二进制文件,包含的代码可被程序调用
    标准C库、数学库、线程库…
    库有源码,可下载后编译;也可以直接安装二进制包
    位置一般放在:/lib /usr/lib
  • 库的知识
    库是事先编译好的,可以复用的代码
    在os上运行的程序基本上都要使用库,使用库可以提高开发效率
    window和Linux下库文件的格式不兼容
    Linux下包含静态库和动态库
  • 静态库的特点
    编译时把静态库中相关代码复制到可执行文件中
    程序中已包含代码,运行时不再需要静态库
    程序运行时无需加载库,运行速度更快
    占用更多磁盘和内存空间
    静态库升级后,程序需要重新编译链接
  • 案例如下:
    在这里插入图片描述
    注:此时生成hello.o文件,但不是可执行文件,没有链接库
  • 静态库创建
    静态库
    创建静态库步骤:
    1 . 编写库文件代码,编译为.o 目标文件。
    2. ar 命令 创建 libxxxx.a 文件
    ar -rsv libxxxx.a xxxx.o
    ar 参数如下:
    在这里插入图片描述
    注意:1 静态库名字要以lib开头,后缀名为.a
    2 没有main函数的.c 文件不能生成可执行文件。
    链接错误:
    test.c:(.text+0x15):对‘hello’未定义的引用
    collect2: error: ld returned 1 exit status
    含义:表示hello函数在编译的源码内没有找到实现
    解决:实现代码或者找到对应函数的库并且链接它。
    链接静态库:
    gcc -o 目标文件 源码.c -L路径 -lxxxx
    -L 表示库所在的路径
    -l 后面跟库的名称
  • 案例如下:
    在这里插入图片描述
    注:ar -t .a文件:可以得到是由哪个文件得到的
  • 如何使用上述的静态库
    在这里插入图片描述
    注:出现以下错误是由于没有链接库
    在这里插入图片描述
  • 链接库后得到如下(如果将test可执行文件转移到其他目录下,不依赖库文件,也可以执行):
    在这里插入图片描述
  • 动态库
    编译时仅记录用到哪个共享库中的哪个符号,不复制共享库中相关代码
    程序不包含库中代码,尺寸小
    多个程序可共享同一个库
    程序运行时需要加载库
    库升级方便,无需重新编译程序
    使用更加广泛
  • 共享库创建
    动态库的生成步骤:
    1. 生成位置无关代码的目标文件
      gcc -c -fPIC xxx.c xxxx.c …
    2. 生成动态库
      gcc -shared -o libxxxx.so xxx.o xxx.o …
    3. 编译可执行文件
      gcc -o 目标文件 源码.c -L路径 -lxxxx
  • 代码如下:
    在这里插入图片描述
    注:执行动态库的可执行文件错误
    ./test: error while loading shared libraries: libmyheby.so: cannot open shared object file: No such file or directory
    含义:可执行文件所使用的动态库找不到
    解决办法:
    • 找到动态库,添加到/usr/lib里面
    • 或者使用export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库目录,注意在这么加的路径后,只能在当前shell有效
    • 添加在~/.bashrc 文件里面,适用于所有shell,加入export LD_LIBRARY_PATH = LIB_PATH
    • 在/etc/ld.so.conf.d/下加入路径
  • 如何找到一个文件的动态库的名称,如下:
    在这里插入图片描述

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

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

相关文章

输入某年某月某日,判断这一天是这一年的第几天?(Java)

思路: 1,分别定义三个变量来接收 年 月 日 2,累加已经过完的月份的天数 日期 3,二月份的天数要根据是否是闰年,随之改变 1 3 5 7 8 10 12 ---> 31天 4 6 9 11 ---> 30天 2 ---> 闰…

== 和 equals:对象相等性比较的细微差别

和 equals:对象相等性比较的细微差别 既要脚踏实地于现实生活,又要不时跳出现实到理想的高台上张望一眼。在精神世界里建立起一套丰满的体系,引领我们不迷失不懈怠。待我们一觉醒来,跌落在现实中的时候,可以毫无怨言地…

鸿蒙原生应用遍地开花,中小开发者能否分到一杯羹?

2023年对于华为鸿蒙来说,是颇具转折意义的一年,年初还挣扎在生死线上,年末已然渡过了万重山,开始踏上万里路。 时间回到2022年的12月,Strategy Analytics研究报告显示,2022年华为鸿蒙HarmonyOS手机全球市场…

REVIT二次开发 自动门窗墙体标注

步骤1 步骤2 步骤3 using System; using System.Collections.Generic; using System.Linq; using System

用户资源(菜单)控制学习使用

效果图 第一步 需要再定义常量资源 //信访听证 资源前缀public static final String RESPREFIX_MODULE_XINFTZ_"module_xinftz_";//听证专家库public static final ConstantItem RES_MODULE_XINFTZ_TINGZZJK new ConstantItem(RESPREFIX_MODULE_XINFTZ_ "tin…

【LeetCode】每日一题 2024_1_22 最大交换(模拟)

文章目录 LeetCode?启动!!!题目:最大交换题目描述:代码与解题思路 LeetCode?启动!!! 几百年没有见到题目描述这么短的题目了,泪目了 题目&#x…

计算机缺失msvcp110.dll如何修复?只需学会这个5个方法,轻松解决dll问题

丢失msvcp110.dll文件可能会引发一系列广泛的问题,这个动态链接库文件对于Windows操作系统中某些应用程序的正常运行至关重要。当msvcp110.dll缺失时,用户可能会遭遇如程序无法启动、运行过程中突然崩溃、功能受限或完全失效等现象。具体来说&#xff0c…

蓝桥杯真题(Python)每日练Day4

题目 OJ编号2117 题目分析 第一种先采用暴力的思想,从第一根竹子开始,找到连续的高度相同的竹子,砍掉这些竹子,一直循环这个方法,直到所有的竹子高度都为1。很明显,依次遍历竹子的高度复杂度为O&#x…

air001研究笔记.基于arduino快速开发简单项目

一、air001芯片简介 air001是厂商合宙推出的一款tssop封装的mcu芯片。支持swd与串口烧录,多面向简单的功能简单类别的电子产品,因为官方文档齐全上手简易,所以也特别适合非专业爱好者乃至于幼儿编程。芯片内置资源:AIR001芯片数据…

智能小程序环境配置流程

App 与智能小程序 在用户使用 App 扫描小程序的二维码或者点击设备,尝试进入小程序时,系统会对 App 当前环境与小程序所需运行环境进行比对,确定环境配置兼容后,App 才能启动并运行小程序。 比对规则中,主要涉及&…

Redis分布式系统:集群

"还不如留给花园,多一瞬色彩~" 当我们聊到“集群”这一个词,我们脑中构想出的画面,一定是多台机器,构成的分布式系统,这可以被称为一个“集群”。其实,在前篇的哨兵机制下,奇数个监控…

【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

内容包含笔者个人理解,如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 机器学习与概率论 在回归拟合数据时,根据拟合对象,可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入…

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后,会在目录下生成如下内容:进入里面,选择.git,要上传的内容(资料或代码复制到该目录下):…

【MATLAB源码-第123期】基于matlab的SSK(空间位移键控)调制和QSSK(正交空间位移键控)调制误码率对比。

操作环境: MATLAB 2022a 1、算法描述 1. SSK(空间位移键控): - 基本原理:SSK是一种MIMO(多输入多输出)系统中的调制技术。它通过选择性地激活不同的发送天线来传输信息。在每个时间槽&…

Nuxt2.x Error页面返回自定义请求状态码

一、问题描述 最近接到一个需求,针对Nuxt2.x的一个项目进行SEO优化,需要对404页面的状态进行修改,将404页面的请求状态码改为301,而不是404: 二、解决方案 1.几种无效尝试 (1)layouts下的err…

多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

我觉得跟着国家对鸿蒙的推进,就知道发展前景肯定是没错的。并且现在已经走向独立道路。 华为鸿蒙是国家主推的操作系统项目,而之前由于美丽国的一系列制裁后。华为也终于崛起;在1月18号的华为鸿蒙仪式中,推出了HarmonyOSNEXT星空…

Java基础 - 09 Set之linkedHashSet , CopyOnWriteArraySet

LinkedHashSet和CopyOnWriteArraySet都是Java集合框架提供的特殊集合类,他们在特定场景下有不同的用途和特点。 LinkedHashSet是Java集合框架中的一种实现类,它继承自HashSet并且保持插入顺序。它使用哈希表来存储元素,并使用链表来维护插入…

Git学习笔记(第3章):Git常用命令

目录 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库状态 3.4 添加暂存区 3.5 提交本地库 3.6 历史版本 3.7 修改文件 3.8 版本穿梭 小结 命令 作用 git config --global user.name 用户名 设置用户签名 git config --global user.email 邮箱 设置用户签名 …

全国各城市绿地及绿化面积数据,shp/excel格式,2020-2022年

基本信息. 数据名称: 全国各城市绿地及绿化面积数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1province省份名称2city城市名称4city_dm城市…

【python】python实现代码雨【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、效果图: 二、准备工作 (1)、导入必要的模块: 代码首先导入了需要使用的模块:requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模…