GCC制作静态库详解

news2024/11/17 12:47:13

目录

前言

一.静态动态库区别

二.静态库制作

2.1 库文件命名

三.静态库文件制作

3.1 静态库制作

3.1.1 先获得.o文件

3.1.2 生成静态库文件

3.1.3 删除不必要文件

3.1.4 使用静态库

3.1.5 使用运行运行


前言

带大家快速入门,学会制作静态库。本文详细介绍在Linux系统中使用gcc制作静态库的各种细节:库文件的命名: 必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....;静态库一般以 .a 为后缀 ;动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2

一.静态动态库区别

静态库和动态库是程序开发的两种库类型,它们在链接方式、可执行文件的独立性以及运行时加载上有着本质的区别。

首先,静态库在程序编译时会被完整地拷贝到最终的可执行文件中。这意味着使用静态库的程序在部署时不需要依赖额外的库文件,因为所有需要的代码都已经包含在内。这样做的好处是简化了程序的分发,因为用户无需安装任何额外的库即可运行程序。然而,这也导致了可执行文件体积较大,且如果静态库更新,需要重新编译整个程序以包含新的库版本。

其次,动态库在程序编译时不包含在可执行文件中,而是在程序运行时由操作系统加载。这意味着可执行文件体积较小,且当动态库更新时,只需替换库文件即可,无需重新编译程序。动态库的使用提高了代码的复用性,降低了程序之间的耦合度。但是,它要求在用户的系统上安装有相应版本的动态库文件,否则程序可能无法运行。

最后,从文件扩展名来看,静态库通常以“.a”或“.lib”为扩展名,而动态库则以“.so”或“.dll”为扩展名。这些扩展名分别对应不同的操作系统和平台。

总的来说,静态库和动态库各有优势和不足。在选择使用时,需要根据项目的具体需求来决定。例如,如果希望简化部署并且不依赖于外部库,可能会倾向于使用静态库;而如果关注于程序的更新和维护,以及减小可执行文件的大小,动态库可能是更好的选择。此外,还需要考虑目标用户的环境,确保他们能够访问到正确的库版本。

二.静态库制作

2.1 库文件命名

库文件的命名:

必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....

静态库一般以 .a 为后缀

动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2

三.静态库文件制作

不管需要制作的是静态库还是动态库,原材料都是.o文件 (可重定位文件) 库文件内部不允许出现主函数main

gcc xxx.c -o xxx.o -c 

3.1 静态库制作

文件结构

3.1.1 先获得.o文件

gcc  max.c -o max.o  -c -FPIC -I../inc
gcc  sum.c -o sum.o  -c -FPIC -I../inc

3.1.2 生成静态库文件

把以上生成的两个.o文件一起编译生成静态库文件

ar -rcs libmy_lib.a max.o swap.o

3.1.3 删除不必要文件

删除写文件,方便观察

rm max.c max.o sum.c sum.o

3.1.4 使用静态库

如何使用静态库文件

 gcc src/*.c -I./inc -L./lib -lmy_lib -o bin/main

3.1.5 使用运行运行

直接进去bin目录运行就可以输出了

注意:制作完静态库的时,不建议把头文件也删除。

以上是本期内容,若有错误或不懂,欢迎评论私信!!!

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

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

相关文章

“玩转文本魔法师:Python编程轻松变格式“

Hey小伙伴们,今天我们要一起打造一个文本转换器,就像神奇的魔法棒,能把普通的文字变成各种奇妙的格式!想象一下,你的输入是:“Hello, World!”,输出可以是Markdown、HTML或者粗体、斜体的文字&a…

大语言模型(Large Language Model,LLM)简介

1. 什么是大语言模型 它是一种基于深度学习的人工智能模型,它从大量来自书籍、文章、网页和图像等来源的数据中学习,以发现语言模式和规则,如处理和生成自然语言文本。通常,大语言模型含数百亿(或更多)参数…

外包干了4年,技术退步明显.......

先说一下自己的情况,大专生,19年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

GJB5000软件配置管理计划模板

1 范围 1.1 标识 本条应描述本文档所适用的系统和软件的完整标识,适用时,包括其标识号、名称、缩略名、版本号和发布号。 1.2 系统概述 本条应概述本文档所适用的系统和软件的用途。它还应描述软件的一般特性;概述软件开发、运行和维护…

【 Mysql8.0 忘记登录密码 可以试试 】

** Mysql8.0 忘记登录密码 可以试试 ** 2024-3-21 段子手168 1、首先停止 mysql 服务 ,WIN R 打开运行,输入 services.msc 回车打开服务,找到 mysql 服务,停止。 然后 WIN R 打开运行,输入 CMD 打开控制台终端输…

深度学习绘制热力图heatmap、使模型具有可解释性

思路 获取想要解释的那一层的特征图,然后根据特征图梯度计算出权重值,加在原图上面。 Demo 加上类激活(cam) 可以看到,cam将模型认为有利于分类的特征标注了出来。 下面以ResNet50为例: Trick: 使用 for i in model._modules.items():可以…

springboot做自定义校验注解

目录 自定义校验注解的实现 注意: 首先,我们需要自定义一个校验注解: 注解含义: Target({ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy PhoneValidator.class) 校验注解逻辑实现类&a…

数据结构:图的最短路径

目录 一、最短路径的基本概念 二、无权图单源最短路径 三、Dijkstra算法(正权图单源) 3.1、算法的基本步骤 3.2、算法的实现 3.3、习题思考 3.3.1、网络延迟时间 四、A*算法(正权图单源单目标点) 4.1、算法的基本概念 4…

阿里必问:Spring源码背后的10大设计奥秘!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 各位小米粉丝们,大家好!今天小米要和大家分享的是一个备受关注的话题——“阿里巴巴面试题:Spring源码中的设计模式?”设计模式是软件工程领域中的经典话题,也是技术面试中的常见考点之一。而…

UE5学习日记——Rope Swing 人物与绳索摆动知识准备

rope swing荡绳 比我想的要复杂,目前还没查到简单的做法。本文为查资料的记录,积累后再做一个自己满意的荡绳蓝图。 一、某国外网友的解释 原文 https://forums.unrealengine.com/t/implementing-rope-swing/83098/15 Project Flake - Physics Rope De…

1+x中级题目练习复盘(八)

SQL 语句中进行 group by 分组时,可以不写 where 子句 在使用 select 语句进行查询分组时,如果希望去掉不满足条件的分组,使用 having 子句File 类的 isDirectory() 方法可以判断文件是否为目录 在使用 select 语句进行查询分组时&#xff0…

StarRocks学习笔记

介绍场景建表明细模型聚合模型更新模型主键模型 介绍 StarRocks是一款经过业界检验、现代化,面向多种数据分析场景的、兼容MySQL协议的、高性能分布式关系型分析数据库。 StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果&#xff…

【数据结构】链表习题之链表的中间节点和合并两个有序链表

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 嗨嗨,今天的博客是关于链表的题目,力扣题目之链表的中间节点和合并两个有序链表 一.链表的…

【MySql】1.mysql数据库

一、数据库的基本概念 1.数据 记录事物的信息;按统一的格式进行存储 2.表 数据的集合,行和列的组合;将多条数据组织在一起 3.数据库 表的集合,是存储 相互有关 数据的仓库 二、数据库管理系统 DBMS的主要功能: …

【Unity】UI九宫格

什么是九宫格? 顾名思义,九宫格就是指UI切成9个格子,9个格子可以任意拉伸。 1、3、7、9不拉伸。 2、8水平拉伸。 4、6垂直拉伸。 5既可以水平也可以垂直拉伸。 怎么切九宫格? 选中图片,改成Sprite模式,点…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js,所以我们主应用…

axure和蓝湖上查看页面的说明和上传文件

蓝湖上传文件 入口 可添加链接和文件 文件可添加 PDF,word,Excel等,不能添加压缩包,可在线预览文件内容 axure元件说明 在原型上添加说明 axure发布页 axure预览页或发布到axure的服务器上,查看页面说明的方法 点…

jmeter之并发和顺序执行与特殊线程组-第四天

1.jmeter的并发执行 并发执行:多个线程同时执行,不能确定谁先结束 以上案例中http请求里面没有写任何内容,只是为了看这个并发执行的效果 2.jmeter的顺序执行 顺序执行:多个线程顺序执行 再测试计划中勾选“独立运行每个线程组…

大舍传媒:纽约纳斯达克大屏引领企业多维曝光,挑战华尔街巨头,获得30%销售增长!

作为一名深耕华尔街的金融巨擘,我深知企业在如今竞争激烈的商业环境中,亟需寻找新的推广方式来获得曝光,并取得销售增长。而纳斯达克大屏,作为世界著名的电子交易市场,无疑是一个引领企业多维曝光的理想平台。在本篇干…

基于Matlab的血管图像增强算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…