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

linux静态库与动态库

  库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在Linux 下有静态库和动态库。
  静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以 lib 开头,以.a 结尾。使用 ar 命令创建静态库。
  动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候被载入的。所以程序在运行的时候需要动态库了。因此编译出来的体积就比较小。以lib 开头,以.so结尾。使用 gcc 命令创建动态库。

一、制作静态库

1.1、新建 mylib.c 文件

#include<stdio.h>
void mylib(void);
void mylib(void)
{printf("This is mylib\n");
}

1.2、将源码.c 文件编译生成.o 文件

  使用以下指令将源码.c 文件编译生成.o 文件

sudo gcc -c mylib.c

在这里插入图片描述

1.3、使用 ar 命令创建静态库

  使用以下指令创建静态库

ar cr libmylib.a mylib.o

在这里插入图片描述

1.4、编写测试代码 test.c

  编写测试代码 test.c如下

#include <stdio.h>
void mylib(void);
int main(void)
{mylib();return 0;
}

1.5、编译测试文件 test.c

  使用如下指令编译测试文件 test.c

gcc test.c -lmylib -L .

在这里插入图片描述

1.6、运行测试 a.out

  运行测试 a.out,如下图所示:
在这里插入图片描述

二、制作动态库

2.1、新建 mylib.c 文件

  新建 mylib.c 文件,编辑内容如下所示

#include<stdio.h>
void mylib(void);
void mylib(void)
{printf("This is mylib\n");
}

2.2、将源码.c 文件编译生成.o 文件

  使用以下指令将源码.c 文件编译生成.o 文件

gcc -c -fpic mylib.c 

在这里插入图片描述

2.3、使用 gcc 命令创建动态库

  使用以下指令创建动态库

gcc -shared -o libmylib.so mylib.o

在这里插入图片描述

2.4、编写测试代码 test.c

  编写测试代码 test.c,编辑内容如下所示:

#include <stdio.h>
void mylib(void);
int main(void)
{mylib();return 0;
}

2.5、编译测试文件 test.c

  使用如下指令编译测试文件 test.c

gcc test.c -lmylib -L .

  或者使用绝对目录

gcc test.c -lmylib -L /home/z/myshare/lib/2

在这里插入图片描述

2.6、运行测试 a.out

  运行测试 a.out,如下图所示:
在这里插入图片描述

三、动态库使用

  在动态库使用是,系统会默认去/lib,/usr/lib 目录下去查找动态函数库,如果我们使用的库不在里面,就会提示错误。解决这个问题有两种方法。
  第一种方法:将生成的动态库拷贝到/lib 或者/usr/lib 里面去,因为系统会默认去这俩个路径下寻找。
  第二种方法:把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样添加,但是这种方法只在当前设置的窗口有效。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/z/myshare/lib/2

相关文章:

linux静态库与动态库

库是一种可执行的二进制文件&#xff0c;是编译好的代码。使用库可以提高开发效率。在Linux 下有静态库和动态库。   静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以 lib 开头&#xff0c;以.a 结尾。…...

LeetCode 面试题 10.03. 搜索旋转数组

文章目录 一、题目二、C# 题解 一、题目 搜索旋转数组。给定一个排序后的数组&#xff0c;包含n个整数&#xff0c;但这个数组已被旋转过很多次了&#xff0c;次数不详。请编写代码找出数组中的某个元素&#xff0c;假设数组元素原先是按升序排列的。若有多个相同元素&#xff…...

SpringCloudSleuth异步线程支持和传递

场景 在使用Sleuth做链路跟踪时&#xff0c;默认情况下异步线程会断链&#xff0c;需要进行代码调整支持。 调整内容 方式一 使用Async实现异步线程 开启异步线程池 EnableAsync SpringBootApplication public class LizzApplication {public static void main(String[] a…...

如何使用 Disco 将黑白照片彩色化

Disco 是一个基于视觉语言模型&#xff08;LLM&#xff09;的图像彩色化工具。它使用 LLM 来生成彩色图像&#xff0c;这些图像与原始黑白图像相似。 本文将介绍如何使用 Disco 将黑白照片彩色化。 使用 Disco 提供了一个简单的在线演示&#xff0c;可以用于测试模型。 访问…...

ChatGPT AIGC 制作大屏可视化分析案例

第一部分提示词prompt: 商品 价格 p1 13 p2 41 p3 42 p4 53 p5 19 p6 28 p7 92 p8 62 城市 销量 北京 69 上海 13 南京 18 武汉 66 成都 70 你现在是一名非常专业的数据分析师,请结合上述数据完成下列几件事情 1:第一部分数…...

2023年9款好用的在线流程图软件推荐!

随着互联网技术和基础设施的发展&#xff0c;人们能用上比过去更加稳定的网络&#xff0c;因此在使用各类工具软件时&#xff0c;越来越倾向于选择在线工具&#xff0c;或是推出了网页版的应用。 就流程图软件而言&#xff0c;过去想要绘制流程图&#xff0c;我们得在电脑上安…...

剑指Offer || 044.在每个树行中找最大值

题目 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 解释:1/ \3 2/ \ \ 5 3 9 示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3] 解释:1/ \2 3示例3&#xff…...

ESP32网络开发实例-UDP数据发送与接收

UDP数据发送与接收 文章目录 UDP数据发送与接收1、UDP简单介绍2、软件准备3、硬件准备4、代码实现本文将详细介绍在Arduino开发环境中,如何实现ESP32通过UDP协议进行数据发送与接收。 1、UDP简单介绍 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传…...

液压自动化成套设备比例阀放大器

液压电气成套设备的比例阀放大器是一种电子控制设备&#xff0c;用于控制液压动力系统中的液压比例阀1。 比例阀放大器通常采用电子信号进行控制&#xff0c;以控制比例阀的开度和流量&#xff0c;以实现液压系统的可靠控制。比例阀放大器主要由以下组成部分&#xff1a; 驱动…...

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享

我的初试备考从4月末&#xff0c;持续到初试前&#xff0c;这中间没有中断。 总的时间分配上&#xff0c;是数学>专业课>英语>政治&#xff0c;虽然大家可支配时间和基础千差万别&#xff0c;但是这么分配是没错的。 数学 时间安排&#xff1a;3月-7月&#xff1a;…...

JQuery - template.js 完美解决动态展示轮播图,轮播图不显示问题

介绍 在JQuery中,使用template.js把轮播图的图片渲染到页面后,发现无法显示。 解决方案 首先,打开控制台发现,图片dom是生成了的,排除dom的缺失其次,换了一个插件Swiper,发现效果一样,排除插件的沦丧把动态数据换成假数据,...

CC2540和CC2541的区别简单解析

CC2541理论上是CC2540的精简版&#xff0c;去除了USB接口&#xff0c;增加了1个HW1C接口。 CC2540集成了2.4GHz射频收发器&#xff0c;是一款完全兼容8051内核的无线射频单片机&#xff0c;它与蓝牙低功耗协议栈共同构成高性价比、低功耗的片上系统&#xff08;SOC&#xff09…...

Java8 新特性之Stream(八)-- Stream的collect()与Collectors的联合运用

目录 1. collect()的 收集 作用 2. collect()的 统计 作用 3. collect()的 分组 作用 4. collect()的 拼接 作用...

SpringBoot基础详解

目录 SpringBoot自动配置 基于条件的自动配置 调整自动配置的顺序 纷杂的SpringBoot Starter 手写简单spring-boot-starter示例 SpringBoot自动配置 用一句话说自动配置&#xff1a;EnableAutoConfiguration借助SpringFactoriesLoader将标准了Configuration的JavaConfig类…...

学会Docker之---应用场景和基本操作

实体机、VM和容器 实体机&#xff08;Physical Machine&#xff09;是指实际的物理设备&#xff0c;例如我们常见的计算机主机、服务器等。它们是由硬件组成&#xff0c;可以直接运行操作系统和应用程序。 虚拟机&#xff08;Virtual Machine&#xff09;是在一台物理机上通过…...

C++_linux下_非阻塞键盘控制_程序暂停和继续

1. 功能 在程序执行过程中,点击键盘p按键(pause), 程序暂停, 点击键盘上的n按键(next),程序继续执行 2. 代码 #include <iostream> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/ioctl.h> char get_keyboar…...

SQL AND, OR and NOT(与,或不是运算符)

SQL AND & OR 运算符 AND&OR运算符用于根据一个以上的条件过滤记录&#xff0c;即用于组合多个条件以缩小SQL语句中的数据。 WHERE子句可以与AND&#xff0c;OR和NOT运算符结合使用。 AND和OR运算符用于根据多个条件筛选记录&#xff1a; 如果由AND分隔的所有条件为TR…...

Python网络编程之Socket(套接字)

文章目录 一、Socket概念二、套接字的发展史及分类三、Socket的使用语法格式(基于TCP协议)1.基于TCP协议的套接字(socket)编程半连接池 2.基于UDP协议的套接字(socket)编程也可以使用服务端只接收客户端消息 黏包现象 一、Socket概念 Socket套接字&#xff0c;一种独立于协议的…...

金山终端安全系统V9.0 SQL注入漏洞复现

0x01 产品简介 金山终端安全系统是一款为企业提供终端防护的安全产品&#xff0c;针对恶意软件、病毒和外部攻击提供防范措施&#xff0c;帮助维护企业数据和网络。 0x02 漏洞概述 金山终端安全系统V9.0 /inter/update_software_info_v2.php页面存在sql注入漏洞&#xff0c;该…...

Radius OTP完成堡垒机登录认证 安当加密

Radius OTP&#xff08;One-Time Password&#xff09;是一种用于身份验证的协议&#xff0c;它通过向用户发送一个一次性密码来验证用户的身份。使用Radius OTP可以实现堡垒机登录&#xff0c;以下是一些实现步骤&#xff1a; 1、安装Radius服务器 首先需要安装Radius服务器…...

从编译失败到成功发布:用VS BuildTools彻底解决MSBuild“能编译不能发布”的坑

从编译到发布&#xff1a;彻底解决MSBuild部署.NET Framework网站的技术困境 许多.NET开发者都曾遇到过这样的场景&#xff1a;在命令行中能够顺利编译项目&#xff0c;却在尝试发布&#xff08;Publish&#xff09;ASP.NET网站时遭遇各种莫名错误。这种"能编译不能发布&q…...

终极指南:3分钟掌握Switch游戏安装的完整解决方案

终极指南&#xff1a;3分钟掌握Switch游戏安装的完整解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为Nintendo S…...

Borderless Gaming终极指南:如何轻松实现无边框游戏窗口管理

Borderless Gaming终极指南&#xff1a;如何轻松实现无边框游戏窗口管理 【免费下载链接】Borderless-Gaming Play your favorite games in a borderless window; no more time consuming alt-tabs. 项目地址: https://gitcode.com/gh_mirrors/bo/Borderless-Gaming 你…...

Unity 5.6移动VR开发与单通道渲染优化指南

1. Unity 5.6移动VR开发环境配置1.1 Daydream原生支持解析Unity 5.6首次实现了对Daydream平台的原生支持&#xff0c;这标志着移动VR开发进入新阶段。与传统的插件式集成不同&#xff0c;原生支持直接内置于引擎核心&#xff0c;带来三个显著优势&#xff1a;性能提升&#xff…...

OpenAgents:从零构建数据驱动的AI智能体平台实战指南

1. 项目概述&#xff1a;当AI不只是聊天&#xff0c;而是能替你“干活”的智能体最近在AI圈子里&#xff0c;一个名为“OpenAgents”的项目热度持续攀升。它不是一个简单的聊天机器人&#xff0c;也不是一个封闭的单一应用。简单来说&#xff0c;OpenAgents是一个开源的、数据驱…...

TrollInstallerX终极指南:3分钟完成iOS安装工具的零基础教程

TrollInstallerX终极指南&#xff1a;3分钟完成iOS安装工具的零基础教程 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款专为iOS设备设计的智能越…...

从集合运算到代码实战:一文搞懂Python中Jaccard相似度的5种计算姿势(附性能对比)

从集合运算到代码实战&#xff1a;一文搞懂Python中Jaccard相似度的5种计算姿势&#xff08;附性能对比&#xff09; 在数据科学和机器学习领域&#xff0c;集合相似度计算是一个基础但至关重要的任务。想象一下这样的场景&#xff1a;你需要比较数百万用户的兴趣标签&#xff…...

哔咔漫画下载器:3步打造个人离线漫画库,告别网络限制烦恼

哔咔漫画下载器&#xff1a;3步打造个人离线漫画库&#xff0c;告别网络限制烦恼 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://g…...

基于开源LLM构建私有化智能体:从意图解析到安全执行的工程实践

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫giocaizzi/ralph-copilot。乍一看这个名字&#xff0c;可能会让人联想到微软的 GitHub Copilot&#xff0c;但它的定位和实现方式其实非常不同。简单来说&#xff0c;这是一个基于开源大语言模型&#xff…...

恶意软件分析利器:基于统计特征的二进制模式识别与批量编辑工具

1. 项目概述&#xff1a;一个面向恶意软件分析的“均值”编辑器最近在分析一些PUA&#xff08;潜在不受欢迎应用程序&#xff09;和恶意软件样本时&#xff0c;我经常遇到一个头疼的问题&#xff1a;很多样本为了绕过静态检测&#xff0c;会嵌入大量垃圾代码、花指令&#xff0…...