C语言 静态库制作(亲测可行)

C语言代码的条件编译,动态库,静态库的制作 if 阅读详情

文章目录

 

静态库简介

静态库的本质就是将多个目标文件打包成一个库文件。链接静态库就是将库中被调用代码复制到可执行文件中。使用了静态库的可执行文件占用磁盘空间和内容空间都比较大,静态库中代码被修改后,需重新生成库文件并需重新链接库文件。使用静态库的可执行文件无需依赖静态库,静态库即使被删除,也可照常运行。执行效率比动态库相对要高。

静态库的文件形式为:lib<库名>.a

静态库制作

代码实现

假如我们制定一个数学操作的静态库,在同一个文件夹下,有如下文件:
– add.c
– add.h
– sub.c
– sub.h

add.c为加法操作实现,sub.c为减法操作实现。
代码如下:

add.h

#ifndef C_ADD_H
#define C_ADD_H

int add(int a, int b);

#endif //C_ADD_H
  •  

add.c

#include "add.h"

int add(int a, int b) {
    return a + b;
}
  •  

sub.h

#ifndef C_SUB_H
#define C_SUB_H

int sub(int a, int b);

#endif //C_SUB_H
  •  

sub.c

#include "sub.h"

int sub(int a, int b) {
    return a - b;
}
  •  

创建静态库

首先我们将源代码编译为目标文件:
gcc -c add.c sub.c
执行完毕后会生产add.o和sub.o文件。

静态库创建使用ar命令;
ar -r libmymath.a add.o sub.o
执行完后,会创建一个libmymath.a文件。

链接使用静态库

我们为了使用上面的静态库,我们在如上相同文件夹下,创建一个main.c文件:
– add.c # 加法实现
– add.h # 加法头文件
– sub.c # 减法实现
– sub.h # 减法头文件
– libmymath.a # 静态库文件
– main.c # 入口主程序

main.c

#include <stdio.h>
#include "add.h"
#include "sub.h"

int main(void) {
    int a = 20;
    int b = 10;
    printf("%d+%d=%d\n", a, b, add(a, b));
    printf("%d-%d=%d\n", a, b, sub(a, b));
    return 0;
}
  •  

我们使用#include预处理指令包含了sub.h和add.h头文件,来使用我们制作的mymath静态库。
如果我们直接gcc -o main main.c肯定会出错,因为编译器不知道add.h和sub.h是哪里来的,也不知道add和sub函数的定义在哪里。
所以我们需要使用-l选项,让编译器链接到我们制作的静态库:

gcc main.c libmymath.a -o main

 

此时在当前目录生成了main的可执行文件。
运行得到如下:

20+10=30
20-10=10
  •  

静态库如果被删除,不会影响可执行文件的执行。因为静态库的代码被复制到了可执行文件中,作为了可执行文件的一部分,这也是静态库和动态库的部分区别所在。

至此,从静态库的制作到链接使用就结束了。

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理 多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光... 阅读详情

相关推荐

python模拟银行交易流水

模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段

qq_31823889的博客 2910

【C语言学习笔记】:静态库

打开工程“属性面板”→”配置属性”→“C/C++”→” 常规”,在“附加包含目录”属性值中,键入StaticMath.h 头文件所在目录的路径或浏览至该目录。✪ -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a或.so来确定库的名称。还有2中方法设置都可行。① “属性面板”→”配置属性”→“链接器”→”常规”,附加依赖库目录中输入,静态库所在目录;打开工程“属性面板”→”配置属性”→ “链接器”→ ”命令行”,输入静态库的完整路径即可。

Jiangziyadizi的博客 1649

本地服务器搭建Uptime Kuma网站监控服务

本文主要介绍如何在Linux系统中一键部署Uptime Kuma运维监控服务,并将这个服务映射至公网实现随时随地远程访问。如果您像我一样在服务器上托管了多个网站,并且没有足够的时间来手动检查每个网站的在线状态,那么当出现问题时,您可能无法及时收到通知来处理这些问题。因此,搭建一个在线监控服务是很有必要的,它可以在状态异常时提醒您,以便您能够及时处理问题,确保网站的稳定性和可用性。监控服务有很多,我最终选择了Uptime Kuma,因为Uptime Kuma是开源免费的,

Tiam_cr的博客 1822

静态库和动态的创建

静态库和动态库的链接

weixin_46954629的博客 1032

SpringBoot与锐浪报表服务器深度整合实战指南

本文详细介绍了SpringBoot与锐浪报表服务器的深度整合实战指南,包括环境准备、Windows/Linux系统配置、核心功能实现代码解析及常见问题解决方案。通过具体案例和代码示例,帮助开发者高效完成报表系统的集成与部署,提升企业级应用的报表处理能力。

weixin_29238147的博客 369

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2576

【c/c++】静态库

1、静态库介绍 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。 程序编译一般需经预处理、编译、汇编和链接几个步骤。静态库特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。 静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动

StudyWinter的博客 6684

液压轴位置闭环控制(比例伺服阀应用)

液压阀的基础知识请参看下面的博客文章:PLC液压控制系列之比例流量阀结构分析_RXXW_Dor的博客-优快云博客比例流量阀液压同步控制的PID闭环调节可以参看下面这篇博文三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)_RXXW_Dor的博客-优快云博客液压控制系统在工业现场应用非常广泛,这篇博文我们简单分析下液压同步控制。这套系统的液压缸为单液压缸,首先简单介绍下什么是单作用液压缸,液压系统的详细理论分析大家可以找些专业书籍学习。

RXXW_Dor的博客 2262

C语言从入门到精通-C静态库的生成及使用

静态库是C语言编程中常用的一种库文件形式。与动态库(Dynamic Library)相比,静态库在程序编译时会被完全嵌入到最终的可执行文件中,因此生成的可执行文件不依赖于外部的库文件。这意味着,无论目标系统上是否安装了相应的库,只要编译时包含了静态库,程序就可以正常运行。C静态库(Static Library)是C语言编程中常用的一种库文件形式。与动态库(Dynamic Library)相比,静态库在程序编译时会被完全嵌入到最终的可执行文件中,因此生成的可执行文件不依赖于外部的库文件。

qq_36115196的博客 1069

Autosar诊断实战系列05-Dcm之0x27加解密服务配置开发详解

UDS 0x27服务实战开发介绍,对解锁尝试次数及delay时间进一步解释。

initiallizer的博客 1991

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2462

C语言中如何生成静态库

关于静态库的用法和功能,你快去试试吧!

EarlF的博客 903

精雕软件(JDpaint) 5.5 绿色版

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

C语言 静态库制作

静态库的本质就是将多个目标文件打包成一个库文件。链接静态库就是讲库中被调用代码复制到可执行文件中。使用了静态库的可执行文件占用磁盘空间和内容空间都比较大,静态库中代码被修改后,需重新生成库文件并重新链接库文件。使用静态库的可执行文件无需依赖静态库,静态库及时被删除,也可照常运行。执行效率比动态库相对要高。 静态库的文件形式为:lib.a

白杨 5805

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言静态库深入剖析

深入掌握C语言静态库的构建与使用技巧,不仅有助于提高开发效率,实现高效的代码复用,还能根据实际需求灵活选择合适的库类型,从而在工程实践中达到最佳的系统性能、资源利用率和维护便利性的平衡。理解静态库的工作机制和适用范围,也是每一个资深C语言开发者必须具备的核心技能之一。

极客代码 2328

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

静态库与动态库的制作(C语言)

今天给大家分享一下动态库和静态库的制作,相信大家已经忘记的差不多了吧,一起来复习复习吧!库的本质:二进制文件库的类型静态库和动态库(共享库)静态库和动态库的区别在于加载程序的时机不同。...

weixin_56187542的博客 1314

C语言之函数库的制作与使用

C语言之函数库的制作与使用 函数库制作与使用是学习编程最基本的技能,今天我们就学习一下静态函数库和动态函数库的制作。 Linux 操作系统支持的库函数分为:静态库和动态库,他们的区别如下: 静态函数库是程序编译时加载到程序中,使用库的程序可独立运行,不受任何影响。 动态函数库在程序编译时不会加载到程序中,需要在程序运行的时候链接到库,因此使用库的程序不可独立运行。 具体区别如下表: 静...

Dallan的博客 2781

Linux C语言动态库及静态库的制作步骤讲解

Linux C语言动态库及静态库的制作讲解    假设在math目录下已编辑好add.c sub.c div.c mul.c func_point.c文件,func_point.c为主文件!    动态库的制作:    方法一: gcc -c -fPIC add.c sub.c div.c mul.c //-c表示生成.o目标文件,-f后加一些编译选项,PIC表示与位置无关 gc

木有 2291

vs2019生成静态库以及静态库的引用(C引用C++,C++引用C)保姆级教程

vs2019生成静态库以及静态库的引用(C引用C++,C++引用C)保姆级教程

orororororo的博客 3264

c语言创建静态库_在C中创建一个静态库

c语言创建静态库All but the simplest C projects will consist of more than one source code file, one for the main function and others for functions used by main. This is purely to make the source code easier t...

weixin_26711425的博客 631

静态库调用_C语言静态库的制作与使用

静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。静态库在程序开发工作中,经常会遇到我们的程序需要链接外部库的做法。比如想要在我们的C工程中调用SQLite数据库的相关接口进行数据库操作,那么我们首先需要做的事情是获取SQLite的源码,然后将SQLite源码编译成静态库libsql...

weixin_36194075的博客 1000

C 制作 静态库和动态库

C语言中 动态库和静态库的制作与使用

weixin_44702665的博客 1084

头文件编译及动态库和静态库的制作及使用

头文件编译及动态库和静态库的制作及使用

2301_81457674的博客 2312

c#生成静态库_C语言静态库的制作与使用

静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。静态库在程序开发工作中,经常会遇到我们的程序需要链接外部库的做法。比如想要在我们的C工程中调用SQLite数据库的相关接口进行数据库操作,那么我们首先需要做的事情是获取SQLite的源码,然后将SQLite源码编译成静态库l...

weixin_39730263的博客 899

全面深入解析:C语言静态库

静态库(Static Library)是软件开发中常用的一种库文件类型,它在编译时被链接到目标程序中,成为程序的一部分。静态库的优势在于程序的独立性和运行时的高性能,但同时也存在占用更多磁盘空间和更新困难的问题。本文将全面探讨C语言中的静态库,从基础概念到高级应用,通过丰富的实例和详细的技术细节,帮助读者深入理解静态库的原理和使用方法。静态库将常用的函数和数据封装成一个独立的文件,程序在编译时将这些库文件链接到可执行文件中。静态链接后的程序不依赖于外部库,可以在没有相应库环境的系统上运行。

极客代码 1581

【c语言】组件化打包—静态库lib

静态库的概念和作用,以及如何打包静态库。静态库是一种包含已编译代码的集合,可以在链接时与应用程序一起链接到最终可执行文件中。

努力让自己的能力配得上梦想. 2676

深入浅出:手把手教你制作与使用C语言静态库

本文详细介绍了静态库的概念、工作原理及实战制作流程。静态库是预先编译好的目标代码集合,在编译时被完整嵌入到可执行文件中,具有执行效率高、独立性强等优点,但也存在体积大、更新困难等缺点。通过创建包含加减法功能的数学库libmymath.a,演示了从编写源代码到编译打包,再到链接使用的完整过程。验证了静态库的自包含特性,即使删除库文件,程序仍能正常运行。最后总结了静态库的适用场景和优缺点,为后续学习动态库奠定了基础。

Web安全工具库 960
上一篇: Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)
下一篇: C语言 共享库(动态库)制作
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值