动静态库

说明:使用动静态库,一般直接安装即可,其他使用方法了解即可

静态库

静态库(Static Library)是一种将代码和数据打包成一个单独的文件的库文件,主要用于编译时的链接,而不是运行时。静态库通常以 .a(在Unix和Linux系统中)或 .lib(在Windows系统中)为后缀。

创建静态库

假设有两个源文件 foo.cbar.c,可以使用以下命令创建一个静态库,库名规则:libxxx.a:

gcc -c foo.c bar.c

ar rc libfoobar.a foo.o bar.o

使用静态库

在编译使用这个库的程序时,需要指定静态库文件:

gcc -o myprogram myprogram.c -I . -L . -lfoobar

其中-I . 表示在当前目录中查找头文件  

-L . 表示在当前目录中查找库文件,

-lfoobar 表示链接名为 libfoobar.a 的静态库。

直接编译很麻烦有什么方法可以避免这么繁琐的操作吗

安装静态库

什么是安装静态库,听起来很高级。其实就是将库文件和头文件放到系统默认搜索路径下。

头文件默认搜索路径在 /usr/include

库文件默认搜索路径在 /lib64

编译时只需要指定库名字就可以

建立软连接 

 

删除连接后,无法编译 

 动态库

动态库(Dynamic Library)是一种可以在运行时被程序加载和使用的库文件。与静态库不同,动态库在程序执行时才被加载到内存中,允许多个程序共享同一份库代码,从而减少内存占用和磁盘空间。

创建动态库

假设有两个源文件 dyfunc.c 和 log.c,可以使用以下命令创建一个静态库:

gcc -fPIC -c log.c dyfunc.c

gcc -shared -o libdylib.so log.o dyfunc.o

shared: 表示生成共享库格式

fPIC:产生位置无关码(position independent code)

库名规则:libxxx.so

使用动态库

和静态库一样:

 gcc -o test main.c -I ./lib/include/ -L ./lib/mylib/  -ldylib

为了编译更简洁可以使用下面方法

安装动态库

头文件默认搜索路径在 /usr/include

库文件默认搜索路径在 /lib64

将静态库也一起使用:,编译测试

 

建立软连接

和静态库一样,就不赘述了

运行动态库

如果将默认路径下的库文件删除,文件运行时会找不到动态库文件,为什么?
编译指令只是编译器在编译阶段使用动态库,在程序运行时,系统不知道动态库在哪 。所以要让系统直到库的位置才能解决问题。

上面的两个方法安装或者建立软连接后,系统可以找到,文件可以运行。如果编译后要运行,但是已经将默认路径下的库文件删除,可以使用以下方法

 更改环境变量 LD_LIBRARY_PATH

LD_LIBRARY_PATH=$LD_LIBRARY_PAHT:xxx(库路径)

 ldconfig 配置/etc/ld.so.conf.d/,ldconfig更新

在/etc/ld.so.conf.d目录下创建一个文件,文件写入库所在目录。

最后,ldconfig 更新设置即可

总结

说了这么多方法,其实实际应用都是直接安装库,将库放到共享库目录下。其他方法了解即可 

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

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

相关文章

Android Studio 所有历史版本下载

一、官网链接 https://developer.android.google.cn/studio/archive 操作 二、AndroidDevTools地址 https://www.androiddevtools.cn/ 参考 https://blog.csdn.net/qq_27623455/article/details/103008937

Mybatis源码剖析---第二讲

Mybatis源码剖析—第二讲 那我们在讲完了mappedstatement这个类,它的一个核心作用之后呢?那下面我有一个问题想问问各位。作为mappedstatement来讲,它封装的是一个select标签或者insert标签。但是呢,我们需要大家注意的是什么&am…

社交媒体数据恢复:soma messenger

步骤1:检查备份文件 首先,我们需要确认您是否已开启Soma Messenger的自动备份功能。若已开启,您可以在备份文件中找到丢失的数据。 步骤2:清除缓存并重启应用 有时候,清除Soma Messenger的缓存文件可以帮助恢复丢失的…

为什么股票市场里有认贼为父的现象?

文章大纲:(本文2648字,完整版本应该3500以上,耗时一个钟) 1、前言:逻辑与博弈 2、直觉引入博弈焦点 3、上周4-5的市场博弈视角 4、下周一视角能看到的东西 5、视角背后看到的情绪周期市场共识下的博弈…

特殊变量笔记

执行demo4.sh文件,输入输出参数itcast itheima的2个输入参数, 观察效果 特殊变量:$# 语法 $#含义 获取所有输入参数的个数 案例需求 在demo4.sh中输出输入参数个数 演示 编辑demo4.sh, 输出输入参数个数 执行demo4.sh传入参数itcast, itheima, 播仔 看效果…

销量翻倍不是梦!亚马逊速卖通自养号测评实战技巧分享!

在亚马逊、速卖通这些跨境电商平台上,卖家们都在想各种办法让自己的产品卖得更好。现在,有一种叫做“自养号测评”的方法特别火。简单来说,就是自己养一些买家账号,然后让这些账号来给你的产品写好评。这样,你的产品就…

Java的反射机制以及使用场景

Java的反射机制以及使用场景 什么是反射Class对象如何使用获取 Class 类对象反射创造对象反射获取类的构造器反射获取类的成员变量反射获取类的方法 反射的应用场景JDBC 的数据库的连接Spring 框架的使用 什么是反射 Oracle 官方对反射的解释 Reflection is commonly used by p…

从零自制docker-14-【实现 mydocker commit 打包容器成镜像】

文章目录 目标注意exec.Commandtar代码结果 目标 piveroot切换工作目录到/merged后,通过docker commit将此时工作目录的文件系统保存下来,使用tar包将该文件系统打包为tar文件 命令类似 ./mydocker commit myimage然后当前目录下会得到myimage.tar 注意…

「实用推荐」如何为桌面 移动跨平台应用选择UI框架/APP架构?

DevExpress .NET MAUI UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该库包括数据网格、图表、日程、数据编辑器、CollectionView和选项卡组件。 获取DevExpress .NET MAUI最新正式版下载(Q技术交流:532598169) “一次编写&#…

ABB机器人---基础编程

目录 第一章 代码解释 1.1 基础代码 1.1.2 关于 VAR robtarget pos 1.1.3 关于四元数 1.2 机器人初始化程序 1.3 配置通信 (ProfiNet 示例,ABB RAPID) 1.4 设置干涉区 (ABB RAPID) 1.5 示教轨迹和自动过程 (ABB RAPID) 1.6 配置抓手并进行抓取操作 (ABB RA…

springboot错误

错误总结 1、使用IDEA 的 initialalzer显示2、IDEA 新建文件 没有 java class3、java: 错误: 不支持发行版本 22解决方法4、IDEA-SpringBoot项目yml配置文件不自动提示解决办法 1、使用IDEA 的 initialalzer显示 IDEA创建SpringBoot项目时出现:Initialization fail…

公认最好用的随身wifi品牌推荐!欧本VS闪鱼VS格行随身wifi哪款更好用?欧本随身wifi靠谱吗?

最近小编后台私信快被问爆了,都想让测评一下自己相中的随身wifi到底行不行。该说不说随身wifi品牌真是越来越多了,今天就挑选咨询量最多的三款:格行,欧本,闪鱼!咱们各方面都实测一下,看看哪款更…

基于ucos-ii操作系统的生产者消费者-问题

目 录 第1章 题目分析. 1 1.1 生产者线程... 1 1.2 消费者线程... 1 1.3 缓冲区... 1 1.4 进程的同步与互斥... 1 第2章 解决方案. 2 2.1 总体方案... 2 2.2 生产者问题... 2 2.3 消费者问题... 3 2.4 进程问题... 5 第3章 实验结果. 6 3.1 运行结果... 6 3.2 结果分析... 8 第…

提取 Chrome、Firefox 中储存的用户密码用于凭据发现

操作环境 Chrome 浏览器 Version 125.0.6422.112 (Official Build) (64-bit)Firefox 浏览器 Version 126.0 (64 位) Chrome 浏览器储存密钥原理 新的 Chrome 浏览器储存密码的方案是使用 Chrome 生成的 AES 密钥对用户密码进行加密之后储存在 Sqlite 数据库文件中,A…

Linux 内核之 mmap 内存映射的原理及源码解析

文章目录 前言一、简介1. mmap 是什么?2. Linux 进程虚拟内存空间 二、mmap 内存映射1. mmap 内存映射的实现过程2. mmap 内存映射流程2.1 mmap 系统调用函数2.2 ksys_mmap_pgoff 函数2.3 vm_mmap_pgoff 函数2.4 do_mmap_pgoff 函数2.5 do_mmap 函数2.6 get_unmappe…

私域流量的真谛:构建并运营属于你自己的私域生态

大家好,我是来自一家专注于私域电商行业的软件开发公司的产品经理,拥有超过七年的行业经验。今天,我想和大家聊聊私域流量的真正含义,以及为何我们应该关注并努力打造属于自己的私域生态。 什么是私域流量? 私域流量&…

HCIA第二天复习上

延长传输距离-------中继器(放大器)------物理层设备 可以延长5倍传输距离 增加网络节点数量 网络拓扑结构 1直线型拓扑 信息安全性差 网络延迟高传输速度慢 2环形拓扑 3星型拓扑 4网状型拓扑 传输效率高,…

【字典树 马拉车算法】336. 回文对

本文涉及知识点 字典树 马拉车算法 336. 回文对 给定一个由唯一字符串构成的 0 索引 数组 words 。 回文对 是一对整数 (i, j) &#xff0c;满足以下条件&#xff1a; 0 < i, j < words.length&#xff0c;i ! j &#xff0c;并且words[i] words[j]&#xff08;两个字…

通过注意力调节实现更好的文本到图像生成对齐

近年来&#xff0c;生成性AI技术在众多领域取得了前所未有的进步。大规模预训练模型的出现激发了各种下游任务中的新应用。这在文本到图像生成领域尤为明显&#xff0c;例如Stable Diffusion、DALL-E 2和Imagen等模型已经显著展示了它们的能力。尽管如此&#xff0c;复杂提示中…

appium篇-windows桌面自动化(一)[环境配置]

1、windows版本&#xff1a;win10 2、winSdk版本 Windows SDK and emulator archive | Microsoft Developer 3、winAppDriver版本 1.2.99 Releases microsoft/WinAppDriver (github.com) ################ 4、python版本 Python 3.9.13 ############### 5、appium版本 Re…