[Linux系统编程] 静态库与动态库

news2024/10/6 12:33:26

一.库的概念

库是写好的现有的,成熟的,可以复用的代码。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
静态链接: 库随着程序一起编译,成为可执行程序的一部分,空间开销大,运行速度快
动态链接: 库只有在程序执行时被用到时才会被加入到内存中,空间开销小,运行较慢

二.Linux环境下制作静态库

首先使用-c选项,将c文件编译为二进制文件(.o),然后使用ar工具将二进制文件制作为静态库。

ar rcs [libXXXX.a] [所用到的.o文件]
其中,库文件名字XXXX可随意编写,但必须以lib为开头,.a为结尾

在这里插入图片描述
使用静态库的过程中,使用gcc编译c文件时,需要加上静态库的存储目录以及名称。
如 : gcc test.c ./lib/libtest.a

注意:
源文件中必须要有函数的定义才可正常编译,若在源文件中没有包含库文件中的函数定义,系统会为其自动隐式定义,可正常执行,但会报错,使用-Wall选项可以查看有报错信息
所以在使用静态库的时候,一般都会在源文件中包含一个头文件,内部是所有的静态库函数定义。
在头文件中,要包含一个头文件守卫,防止重定义。

在这里插入图片描述

总结使用过程:
gcc [c文件] [库文件目录及名称] -I [头文件目录] -o [可执行文件命名]
如:gcc test.c ./a/libmymath.a -I ./b/ -o test.exe

gcc中选项:

-I 指定头文件目录
-o 指定文件名称
-Wall 查看报错信息
-g 增加调试语句
-c 只做预处理,编译,汇编操作,得到二进制文件,不进行连接操作。

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

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

相关文章

[leetcode hot 150]第一百九十一题,位1的个数

题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中设置位的个数(也被称为汉明重量)。 这道题比较简单,直接对最后一位进行与1的与操作,然…

JVM之垃圾判断的详细解析

垃圾判断 垃圾介绍 垃圾:如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾 作用:释放没用的对象,清除内存里的记录碎片,碎片整理将所占用的堆内存移到堆的一端,以便 JVM 将整理出的内…

microk8s 报错tls: failed to verify certificate: x509:

问题: ssh命令出现如下图所示 输入任何microk8s的容器命令几乎都是x509报错 kubectl get pods -ALL 原因: 证书过期 相关文档: MicroK8s - 服务和端口 Microk8S v1.24 - refresh-certs 似乎无法刷新证书 问题 #3241 规范/microk8s Git…

Mybatis进阶——动态SQL(1)

目录 一、 <if> 标签 二、<trim> 标签 三、<where> 标签 四、<set> 标签 五、<foreach> 标签 六、<include> 标签 动态SQL 是Mybatis的强大特性之一&#xff0c;能够完成不同条件下的不同SQL拼接&#xff0c;可以参考官方文档&#…

端到端目标检测 |从DETR 到 GroundingDINO

文章目录 一&#xff0c;DETR1. 简介2. 亮点3. 细节4. 总结一下 二&#xff0c;GroundingDINOGrounding DINO的整体流程Grounding DINO的目标函数 一&#xff0c;DETR 之前的目标检测框架&#xff0c;需要很多的人工干预&#xff0c;很多的先验知识&#xff0c;而且可能还需要…

AppInventor2 表格布局的外面的黑框怎么去掉?

问&#xff1a;表格布局的外面的黑框怎么去掉啊&#xff1f; 答&#xff1a;这个黑框是界面设计的布局位置示意&#xff0c;实际 App 测试时并没有框。 来源&#xff1a;AppInventor2 表格布局的外面的黑框怎么去掉&#xff1f; - App应用开发 - 清泛IT社区&#xff0c;为创新…

SQL查询电商数据案例

包括&#xff0c;Python连接数据库到模拟电商数据库&#xff0c;到sql场景查询 1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import random import time import pymysql# 定义名字数据 xing ["王", "李",…

uni-app学习完结

昨天空余一天&#xff0c;并未写记录&#xff0c;是昨天属于项目完结&#xff0c;这里把最后的打包上线等这里说下。 打包成微信小程序 打包成微信小程序&#xff0c;这需要再微信公众平台里面&#xff0c;进行登陆和设置。这里说下&#xff0c;注册的后&#xff0c;选择需要…

文心智能体平台丨创建你的四六级学习小助手

引言 在人工智能飞速发展的今天&#xff0c;我们迎来了文心智能体平台。该平台集成了最先进的人工智能技术&#xff0c;旨在为用户提供个性化、高效的学习辅助服务。今天&#xff0c;我们将向大家介绍如何利用文心智能体平台&#xff0c;创建一个专属于你的四六级学习小助手。…

zabbix客户端启用ping脚本 , 采集结果返回服务端

1.Zabbix-agent配置 (1) 查看自定义配置的目录位置 # more /etc/zabbix/zabbix_agentd.conf (2) 将配置的脚本放在指定的目录下 # cd /etc/zabbix/zabbix_agentd.d # vi get_ping.conf UserParameter=get_ping[*], /bin/ping -c 1 -W 1 $1 &> /dev/null &a…

未在计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序和未在本地计算机上注册“microsoft.ACE.OLEDB.12.0”提供程序

程序运行出现下图的错误&#xff0c; 或者下图的错误&#xff0c; 首先看一下是不是运行的程序的位数&#xff08;32/64&#xff09;不对&#xff1b; 查看系统位数的方法如下图&#xff1b;下图显示是64位操作系统&#xff1b; 如果运行的程序的位数没有问题&#xff1b; 则需…

MySQL-innodb后台线程

文章目录 一、结构图二、后台线程①Master Thread②IO Thread③Purge Thread④Page Cleaner Thread 拓展知识 一、结构图 二、后台线程 InnoDB是多线程的模型&#xff0c;因此其后台有多个不同的后台线程&#xff0c;负责处理不同的任务 后台线程有&#xff1a; ①Master Thr…

BevDet(1): 算法原理介绍介绍

BevDet是一个LSS-Based的实时高性能的多相机3D检测模型,它用4阶段的范式去做3D目标检测,设计上同时支持Segmentation。何谓4阶段范式: 1.图像域的特征提取(Image -view Encoder)2.视角转换 (View Transformer)3.Bev空间特征提取(BEV Encoder)4.任务头Head它涉及 Image View …

【ai】livekit:Agents 3 : pythonsdk和livekit-agent的可编辑模式下的安装

livekit-agent 依赖于livekit、livekit-api、livekit-protocol 其中livekit就是livekkit-rtc: 包含俩sdk 实时互动sdkReal-time SDK for connecting to LiveKit as a participant livekit-api : 服务端sdk https://pypi.org/project/livekit-api/ livekit的python sdk

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题&#xff0c;这边想要查询为什么出现无法访问的原因&#xff0c;但不知道如何在主机上面进行检查&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;因此联系Hostease的咨询了Hostease技术支持&a…

嵌入式不一定只能用C!

嵌入式不一定只能用C! ---------------------------------------------------------------------------------------手动分割线-------------------------------------------------------------------------------- 本文章参考了以下文章&#xff1a; 这里是引用 ------------…

算法与数据结构高手养成:朴素的贪心法(上)最优化策略

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Linux离线一键安装Docker及docker-compose环境

背景&#xff1a; 在当前软件部署运维环境中由于Docker容器化优势越来越明显&#xff0c;因些被许多公司运维所采用&#xff0c;那首先如何快速安装Docker及docker-compose基础环境就第一时间被人们关注&#xff0c;本人同样在经过多次手工逐条用命令安装的过程&#xff0c;整理…

继承--5.29

继承格式&#xff1a; package javatest2;public class people {int age;double workday;public people(int age, double workday) {this.age age;this.workday workday;} }package javatest2;public class student extends people {int studyday;public student(int age, d…

使用目标检测模型YOLO V9 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

我看到YOLO V8中&#xff08;ultralytics版本8.2.18&#xff09;集成了YOLO V9&#xff0c;所以直接在YOLO V8 OBB的基础上实现YOLO V9 OBB&#xff0c;训练结果也出来了&#xff0c;但是评估指标比YOLO V8 OBB低一点点&#xff0c;不知道是不是哪里遗漏修改了......如有大神赐…