Linux下静态库与动态库的使用

Claude Desktop Cowork国内实操指南:本地文件自动化办公 大语言模型正从‘问答式AI’迈向‘执行型协作者’,其核心能力在于直接操作本地文件、调用系统工具并嵌入真实工作流。Claude Desktop的Cowork模式正是这一范式的代表,它通过轻量沙箱VM实现对Excel、PPT、PDF、音视频等办公资产的读写与处理,无需手动编码即可完成数据清洗、会议纪要生成、自动化报告输出等任务。技术价值体现在权限可控、环境隔离、结果可交付;典型场景覆盖行政文秘的文档流转、销售运营的数据分析、开发者的脚本调试与环境验证。本文聚焦国内用户高频卡点——网络链路、系统权限与工作流断层, 阅读详情

Linux下静态库与动态库的使用


Linux下有静态链接库和动态链接库两种,静态链接库的后缀名是.a,动态链接库的后缀名是.so,下面详细介绍:



静态链接库:

静态链接库是指程序在编译链接的过程中就把依赖的库插入到程序中,这样程序的运行就不需要这些库的支持,但缺点是文件变大,下面以一个例子介绍如何制作静态链接库:


有add.c和mul.c两个文件,分别实现两数相加与相乘:

add.c:

int my_add(int num1, int num2)
{
  return num1 + num2;
}

mul.c:

int my_mul(int num1, int num2)
{
  return num1 * num2;
}


还有一个computer.h头文件,声明了上面两个函数:

int my_add(int num1, int num2);
int my_mul(int num1, int num2);

还有一个main.c文件调用这两个函数:

#include <stdio.h>
#include "compute.h"

int main()
{
  int a=3, b=5;

  printf("%d + %d = %d\n", a, b, my_add(a, b));
  printf("%d * %d = %d\n", a, b, my_mul(a, b));

  return 0;
}



因此,整个例子有4个文件。现在我们把add.c和mul.c编译成静态链接库:

gcc -o add.a -c add.c -static
gcc -o mul.a -c mul.c -static
ar -rc libcompute.a add.a mul.a
上面首先把add.c和mul.c编译成两个独立的.a文件,然后把他们合并成一个静态链接库libcompute.a(当然你也可以把它们做成两个静态链接库,连接main的时候指定这两个就可以了)。static表示编译成静态链接库。ar是一个打包命令。


现在静态链接库libcompute.a做好了,下面我们把它插入到main.c中:

gcc -o main main.c -lcompute -L.
上面的-lcomputer表示要链接的静态链接库是libcomputer.a,-L.表示在当前目录下寻找。

为了方便,我们把上面的命令写在一个Makefile里:

Makefile:

all:
	gcc -o main main.c -lcompute -L.

lib:
	gcc -o add.a -c add.c -static
	gcc -o mul.a -c mul.c -static
	ar -rc libcompute.a add.a mul.a

clean:
	rm -f *.o *.a main

首先:make lib       生成静态链接库

然后:make            生成最终的main可执行文件


这样就可以了,运行main,正确输出结果了:

3 + 5 = 8
3 * 5 = 15


前面说过,可以不把add.o和mul.o合成一个静态链接库,下面给出的是这种方法的Makefile:

Makefile:

all:
	gcc -o main main.c -ladd -lmul -L.

lib:
	gcc -o libadd.a -c add.c -static
	gcc -o libmul.a -c mul.c -static

clean:
	rm -f *.o *.a main


当然为了简便,我们可以只运行一个命令就搞定所有的事情:

Makefile:

all: lib
	gcc -o main main.c -lcompute -L.

lib:
	gcc -o add.a -c add.c -static
	gcc -o mul.a -c mul.c -static
	ar -rc libcompute.a add.a mul.a

clean:
	rm -f *.o *.a main
只要一个make命令就搞定了~~



动态链接库:









完成!









Python-uiautomator2保姆级安装指南:从环境配置到设备连接全流程 本文提供Python-uiautomator2的保姆级安装指南,涵盖从环境配置到设备连接的全流程。详细介绍了Python 3.6+、ADB工具等核心组件的准备,以及uiautomator2的安装和设备端服务初始化步骤,帮助开发者快速搭建Android自动化测试环境,避免常见问题。 阅读详情

相关推荐

MATLAB MinGW-w64 C/C++ 编译器 手动安装配置

根据Matlab版本与MinGW版本对应关系,手动安装、配置并测试MinGW

zjh2883的博客 7346

静态库与动态库的实现及makefile的编写

静态库(.a):程序在编译链接时将库的代码链接到可执行文件中。程序运行时将不再需要静态库。 缺点:文件会变大。 下面用一个例子来说明静态链接库: 有add.c、sub.c、mul.c、div.c文件,实现加减乘除。 add.h #pragma once int add(int a,int b); add.c 1 #include"add.h" 2 ...

xiaodu655的博客 1383

彩虹期权定价

彩虹期权的定价较为复杂,因为它涉及多个标的资产的联合分布。蒙特卡洛模拟(Monte Carlo Simulation):通过模拟多个标的资产价格路径,计算期权的预期支付。解析近似方法:如马尔可夫链近似方法或多变量Black-Scholes公式的扩展。数值方法:如有限差分法或傅里叶变换法,适用于某些特定条件下的多资产期权定价。由于彩虹期权涉及多个标的资产,我们通常使用蒙特卡洛模拟来进行定价。接下来,我将演示如何使用Heston模型和蒙特卡洛模拟方法来定价彩虹期权。

智能科技前沿 1859

编写函数:四则运算

Description 两整数四则运算。 用C语言或C++编写函数实现,append.c中调用了4个函数add()、sub()、mul()、div()的功能分别为加、减、乘、除。请根据“Append Code”自行设计函数,使程序编译正确。 函数的调用格式见“Append Code”。 Input 输入为两个整数a、b。 Output 输出四行,分别为a和b加减乘除的式子和结果。具体格式见sample。 Sample Input 2 2 Sample Ou...

ananya的博客 5188

【保研面试】线性代数面试复习

线性相关和无关 有向量组A,a1,a2…an , 如果存在不是全为0的k1,k2…kn,满足 a1 * k1 + a2 * k2… an * kn = 0 则向量组A称为线性相关(可以跟向量组A共面联系,即可以通过几个向量,表示出另外几个向量,故称为线性相关) 极大线性无关组 设有向量组A a1,a2…an(本身为线性相关) :若选出r个向量,满足以下条件 (1)向量组 r : 线性无关; (2) 向量组A中任意r+1个向量(若有的话)都线性相关, 则向量组r 是向量组A的一个极大线性无关组(简称为

云端筑梦师 6311

【论文阅读】LIME:Low-light Image Enhancement via Illumination Map Estimation(笔记最全篇)

文章目录AbstractIntroductionContributionMethodSpeed-up Method(1):ALM子问题 T子问题 G子问题 Z和μ\muμSpeed-up Method(2):权重变量实验conclusion 今天要整理的一篇论文是使用传统的方法解决低照度的问题,Guo等人于2016年发表在IEEE上,论文《LIME:Low-light Image Enhance...

florrie 2万+

【linux--->动态库和静态库】

提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

kk1125778230的博客 559

详述字符集与汉字编码

字符集与字符编码是文本处理的基础概念。字符集定义字符集合(如ASCII、GB2312、Unicode),字符编码则规定字符如何存储为二进制数据。汉字编码经历了从区域化(GB2312、GBK、BIG5)到全球化(Unicode)的演进,Unicode通过UTF-8、UTF-16等编码方案实现跨语言兼容。UTF-8因兼容ASCII、节省空间且无乱码风险,成为中文互联网的主流编码。正确处理编码问题需统一标准、明确声明格式,并注意生僻字的特殊处理。

零零发不爱ai的博客 806

【Linux】静态库与动态库

【Linux】静态库与动态库

一点一点变好 2480

万字长文:YOLOv5+RK3588 NPU多线程加速全攻略——从理论到部署的终极优化

RK3588 NPU多线程加速优化教程摘要 本教程深入讲解了如何利用线程池技术优化RK3588 NPU上的YOLO目标检测模型推理性能。RK3588内置3个NPU核心,理论算力达6TOPS,为多线程优化提供了硬件基础。教程详细解析了线程池的核心组件(任务队列、工作线程、同步机制)和实现架构,包括类设计、初始化流程、工作线程逻辑(任务获取、NPU推理、结果存储三个阶段)以及任务提交/获取机制。通过预分配模型实例、线程绑定、流量控制等优化手段,实现了从单线程28FPS到多线程120FPS的显著性能提升,为边缘A

LXY_LOVE36的博客 1101

OpenClaw进阶实战(五):多模态能力扩展——让OpenClaw看懂图片、听懂语音

本文介绍了如何在OpenClaw中实现多模态能力,包括图像文字识别(OCR)、图像描述和语音识别(ASR)三种技能。通过PaddleOCR、BLIP和Whisper等开源工具,可以本地化部署这些功能,保护数据隐私。文章详细展示了三个独立技能模块的实现代码,并提出了一个"多模态智能管家"方案,能自动识别消息类型(文本/图片/语音)并调用相应处理技能。该方案适用于电商客服、会议纪要等真实业务场景,使AI助手具备"眼睛"和"耳朵"的多模态交互能力。

PeterPan的博客 162

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

Linux、动态库和静态库、静态库和动态库的介绍、静态库的打包和使用、生成静态库、使用静态库的三种方式、gcc编译、拷贝到系统默认的路径、建立软连接、动态库的打包和使用、生成动态库、使用动态库、解决加载不到动态库的方法

Crocodile1006的博客 2730

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

Linux 静态库与动态库的制作与使用

在Linux中,是一组函数和资源的集合,他们可以被不同的程序共享和使用,库的主要目的是代码重用,减少内存占用,并简化程序的维护。Linux操作系统支持的函数库分为:静态库和动态库。

2301_77071575的博客 1122

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

linux静态库、动态库的生成与使用

linux静态库、动态库的生成预创建1.静态库1.1 静态库的生成1.2 静态库的使用2.动态库2.1动态库的生成2.2动态库的使用 1.静态库 静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ; 优点: 运行快 发布程序无需提供静态库,因为已经在app中,移植方便 缺点:大 1.1 静态库的生成 格式xxxx.a gcc calcufuncs.c -c 生成xxx.o文件 ar rcs libcalcufunc.a calcufuncs.o xxx.o文件生成xxx.a静态库文件 1.2 静

qq_45948070的博客 151

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux动态库和静态库的制作和使用

Linux动态库和静态库的制作和使用

weixin_47604497的博客 516

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux 静态库和动态库的生成及使用

1、分文件编程 分模块的编程思想:假设一个项目需要用到网络、超声波、电机,程序不是都杂糅在同一个文件,而是将网络、超声波、电机需要调用的函数写在不同文件里,在主文件中直接调用即可。 好处: a.功能责任划分 b.方便调试 c.主程序简洁 2、库 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个程序函数库简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个函数更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为三种类型

qq_41455322的博客 917

Linux系统编程——超级详细讲解静态库、动态库的创建、打包和使用

在Linux环境下,我们使用gcc编译连接代码时,可以分为静态链接和动态链接。静态链接即在编译链接时,将代码所使用到的静态库文件代码全部加入到可执行文件中(拷贝实质上是将库文件的代码展开拷贝至我们的可执行程序的代码段。,这样做的缺点是可执行文件会生成的比较大,优点是此时再运行可执行文件就不需要再查找库了。静态库文件一般以.a结尾。动态库链接不会在编译时将动态库文件的代码加入到可执行文件中,而是在可执行文件运行时,去查找所需的动态库,并将其加载到相应的进程中,并且不同的进程可以共享这些动态库。

学习日记 3395

Linux下动态库和静态库的制作及使用

在实际的开发过程中,编写程序往往都需要依赖很多基础的底层库,比方说平时用的较多的标准C库,数学库等等;我们会频繁的使用这些库里的函数,这些函数大多数都是前人为我们写好的,所以值得庆幸的是我们的工作不必从零开始,我们要做的只是在恰当的位置调用合适的库函数去实现相应的功能,充分利用前人的劳动成果,就是“站在巨人的肩膀上”。本文主要简述Linux下库的制作以及使用方法。 一、什么是库 库从本质上来说...

AXW2013的专栏 1193

【库函数】Linux下动态库.so和静态库.a的生成和使用

本文介绍了在Linux环境下生成和使用动态库(.so文件)的方法。通过使用GCC编译器以及相关选项如-fPIC和-shared,作者详细说明了如何将一组C语言源文件编译成一个动态链接库。同时,文章提供了如何在编译其他程序时链接动态库的示例,以及在运行时如何解决动态库找不到的问题。通过本文,读者能够了解动态库的生成过程以及在实际项目中的应用场景,加深对动态库在Linux系统下的使用方法的理解。

朝花夕拾 4721

【Linux】静态库和动态库的生成与使用

静态库动态库的生成与使用 : 本节课重要的原因:以后的使用大多数都是使用现成的动态库和静态库,在本文章我们以加法add()函数建一个动态库和静态库,分过程讲解动态库和静态库的生成与动态库使用。,使用动态库讲述链接与运行加载库的过程(静态库的链接与动态库一样,不一样的是静态库运行时不需加载静态库) 库文件: 把所用到的所有代码的实现打包成一个文件。库中的代码没有main函数(和可执行程序的区别) 动...

进阶之路 2083

【Linux基础IO】动态库 && 静态库(C动静态库打包及使用)

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表;在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。

2202_75605090的博客 1247

【Linux】静态库和动态库的创建与使用--示例讲解

本文将介绍动态库和静态库及其优缺点,创建与使用等,搭配示例讲解,简单易懂!

logani的博客 1789

【浅学Linux】动态库与静态库的封装与使用

朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的?我们先来理解几个问题: 1️⃣:库里面需不需要main函数? 不需要!2️⃣:什么是链接? 就是把所有的.o文件链接形成一个可执行程序。3️⃣:将我的所有.O文件给别人,别人可以使用吗? 可以!4️⃣:你在使用库的时候,需要用到什么? 库文件和头文件。gcc 或者g++ 只认识系统库,不认识其他第三方库,所以我们想要使用对应的静态库的话,怎么做呢? 方式一: 库的安装! 也就是将对应

qq_43727529的博客 1559

Linux 系统编程(三)静态库与动态库的制作与使用

Linux 系统编程(三)静态库与动态库的制作与使用3.1 库文件3.1.1 静态库与动态库3.1.2 工作原理3.2 静态库制作3.2.1 静态库制作步骤3.2.2 运算库静态库实例3.2.3 静态库使用3.3 动态库的制作3.3.1 动态库制作步骤3.3.2 运算动态库实例3.3.3 动态库使用3.4 小结 3.1 库文件 3.1.1 静态库与动态库   库是一种特殊的程序,与一般程序不同,库不能单独运行。库文件分为 静态库 和 动态库(共享库)。静态库是在链接阶段,被复制到程序中,而动态库是在程序运行

编程小镇 425

详解Linux下静态库/动态库的生成和使用(含代码示例和操作流程)&&动态库和静态库的区别

文章目录一、库的概念Windows的库Linux的库二、动态库和静态库的区别1. 载入顺序不同2. 大小与共享的差异3. 库函数调用的差异三、静态库的创建和使用1. 创建静态库的步骤:(一)、ar命令的使用方法(二)、生成静态库的实例2. 调用静态库的测试程序(一)调用静态库的测试程序:test.c(二)编译使用了库函数的程序四、动态库的创建和使用1. 动态库的创建2. 动态库的使用3. 通过调用系统函数来使用动态链接库的实例 关于gcc的使用方法可以参考下方链接博客: Linux下详解gcc编译过程(

weixin_47826078的博客 1万+
上一篇: Linux内核调试之Oops信息
下一篇: 如何使用google code
htttw
博客等级 码龄18年 378粉丝 73原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值