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

静态库和动态库的打包与使用

静态库和动态库
静态库和动态库的打包
生成可执行程序时链接使用
运行可执行程序时加载使用
提前声明,笔者示例的文件有mian.c/child.c/child.h。OK,我们先了解一下,库文件是什么?它其实就是打包了一堆实现常用功能的代码文件.

⭐静态库和动态库的打包
打包时,先应将各个.c文件编译汇编成为目标文件

动态库的生成:
gcc -fPIC -c child.c -o child.o
gcc --share child.o -o libchild.so
注:动态库的命名方式:libxxx.so(xxx表示库的名称)
静态库的生成:
gcc -c child.c -o child.o
ar -cr libchild.a child.o(后面的参数都是.o文件,可以不止一个,就是要打包的文件)
注:静态库的命名方式:libxxx.a(xxx表示库的名称)
生成动态库的指令的参数的含义

–share:生成一个共享库,告诉gcc生成库,不生成可执行程序,不要去检测main函数
-fPIC:产生与位置无关代码,当库用于多个程序共享,便于映射到每个程序中。 让库中的每个函数在各个程序中生成的时候相对于映射的起始位置的偏移量生成
生成静态库的指令的参数的含义:

-c:创建静态库
-r :当静态库要生成,判断是否要将所有的.o文件重新生成静态库,如果只是某一个.o修改了,内容未变,则只用将该模块替换,不用重新生成静态库。(可以没有该参数选项)
在这里插入图片描述

⭐生成可执行程序时链接使用
gcc main.c -0 main -lxxx ( -l:后面加库的名称)

有三种方法:
1.必须将库文件放到指定路径下:/usr/lib64或/usr/lib

2.设置存放链接库时搜索路径的环境变量:将当前库文件所在的路径添加进去
export LIBRARY_PATH=$LIBRARY_PATH:.
冒号链接路径,. 表示当前路径;该路径下存在静态库和动态库,但链接的是动态库,因为gcc默认链接的是动态库.

3.使用gcc -L选项指定链接库的搜索路径:gcc main.c -o mian -L./ -lchild
该方法可以链接编译成功,但是运行不能通过.

⭐运行可执行程序时加载使用
仅仅针对动态库才会在运行时加载库文件,有两种方法:
1.必须将库放到指定路径下:/usr/lib64或/usr/lib

2.设置链接库的加载路径的环境变量:将当前库文件所在路径加进去:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

在这里插入图片描述

👉OK,看了前面的几种方法,我们不由产生好奇,生成可执行程序时链接库的第三种方法,编译通过,但是运行不成功,这种方式是不是很鸡肋!其实该方法才是我们日常应用最多的方式,采用-L指定库的所在路径,我们链接静态库,将静态库放到指定的文件下,然后链接,请看:

😊OK,今天笔者先总结到这里。如有问题或者疑惑,欢迎各位小伙伴们指出。我们一起交流,一起进步!

原文链接:https://blog.csdn.net/weixin_44747239/article/details/106384103

相关文章:

静态库和动态库的打包与使用

静态库和动态库 静态库和动态库的打包 生成可执行程序时链接使用 运行可执行程序时加载使用 提前声明,笔者示例的文件有mian.c/child.c/child.h。OK,我们先了解一下,库文件是什么?它其实就是打包了一堆实现常用功能的代码文件. ⭐…...

h264编码之SPS解析

一、概念 SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。 二、定义 H.264标准协议中规定的SPS格式位于文档的7.3.2.1.1,如下图所示: 1、profile_idc 根据《T-REC-H.264-2…...

使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法

使用enrichKEGG做通路富集分析时&#xff0c;一直报错&#xff1a;显示No gene can be mapped....k <- enrichKEGG(gene gene, organism "hsa", pvalueCutoff 1, qvalueCutoff 1)但是之前用同样的基因做分析是能够成功地富集到通路&#xff0c;即便是网上的数据…...

框架——MyBatis的入门案例

框架概述1.1什么是框架框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交与的方法&#xff1b;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义…...

hadoop兼容性验证

前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;主要解决海量数据的存储和海量数据的分析计算问题&#xff0c;广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念–hadoop生态圈 Hadoop优缺点&#xff1a; 优点&#xff1a; 1、高可靠性&#x…...

运维提质增效,有哪些办法可以做

凡是代码&#xff0c;难免有 bug。 开发者们的日常&#xff0c;除了用一行行代码搭产品外&#xff0c;便是找出代码里的虫&#xff0c;俗称 debug。 随着移动互联网的快速发展&#xff0c;App 已经成为日常生活中不可或缺的一部分。但是在开发者/运维人员的眼里简直就是痛苦的…...

c++基础——结构体

结构体结构体&#xff08;struct&#xff09;&#xff0c;可以看做是一系列称为成员元素的组合体。可以看做是自定义的数据类型。定义结构体struct abc {int x;int y; } e[array_length];const abc a; abc b, B[array_length], tmp; abc *c;上例中定义了一个名为 abc 的结构体&…...

applicationContext相关加载

spring refresh 概述 refresh是一个方法&#xff0c;spring中所有的ApplicationContext容器都需要通过refresh方法初始化&#xff1b; 处理步骤 其中refresh方法包含12个主要的处理步骤&#xff1a; 1、第1个步骤做前置准备 2、第2~6步骤创建BeanFactory&#xff08;Appl…...

数据同步工具Sqoop

大数据Hadoop之——数据同步工具SqoopSqoop基本原理及常用方法 1 概述 Apache Sqoop&#xff08;SQL-to-Hadoop&#xff09;项目旨在协助RDBMS&#xff08;Relational Database Management System&#xff1a;关系型数据库管理系统&#xff09;与Hadoop之间进行高效的大数据交…...

Kafka 版本

kafka-2.11-2.1.1 : Kafka 1.0.0 后&#xff0c;Kafka 版本命名规则从 4 位到 3 位Kafka版本号是 2.1.1前 2 : 大版本号 (MajorVersion)中 1 : 小版本号或次版本号 (Minor Version)后 1 : 修订版本号 (Patch) Kafka 0.7 最早开源版本 &#xff1a; 只提供最基础的消息队列功…...

ElasticSearch 在Java中的各种实现

ES JavaAPI的相关体系&#xff1a; 词条查询 所谓词条查询&#xff0c;也就是ES不会对查询条件进行分词处理&#xff0c;只有当词条和查询字符串完全匹配时&#xff0c;才会被查询到。 等值查询-term 等值查询&#xff0c;即筛选出一个字段等于特定值的所有记录。 【SQL】 s…...

SpringBoot整合Knife4j

文章目录前言一、Knife4j是什么&#xff1f;二、使用步骤1.导入依赖2.编写配置文件3.编写controller和实体类4.测试总结前言 接上篇整合Swagger链接奉上http://t.csdn.cn/9mXSu 一、Knife4j是什么&#xff1f; 官方文档&#xff1a;https://doc.xiaominfo.com/ knife4j可以理解…...

MyISAM和InnoDB存储引擎的区别

目录前言存储引擎区别事务外键表单的存储数据查询效率数据更新效率如何选择前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎&#xff0c;在5.5版本之前默认采用MyISAM存储引擎&#xff0c;从5.5开始采用InnoDB存储引擎。 存储引擎 存储引擎是&#xff1a;数据库管理系统…...

SpringMVC自定义处理多种日期格式的格式转换器

package cn.itcast.utils;import org.springframework.core.convert.converter.Converter;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;/*** 把字符串转换日期*/public class StringToDateConverter implements Converter<String…...

NYUv2生成边界GT(1)

看了cityscape和NYUv2生成边界GT的代码后&#xff0c;因为自己使用的是NYUv2数据集&#xff0c;所以需要对自己的数据集进行处理。CASENet生成边界GT所使用的代码是MATLAB&#xff0c;所以又重新看了一下MATLAB的代码&#xff0c;并进行修改&#xff0c;生成了自己的边界代码。…...

Spring基本概念与使用

文章目录一、Spring概念1.容器2.IoC3.DI4.Ioc与DI的关系二、Spring创建与使用1.Maven2.添加Spring框架支持注&#xff1a;国内的Maven源配置3.简单实例&#xff08;1&#xff09;创建一个Bean对象。&#xff08;2&#xff09;将Bean对象存储到Spring当中&#xff08;3&#xff…...

安恒信息java实习面经

目录1.Java ME、EE、SE的区别&#xff0c;Java EE相对于SE多了哪些东西&#xff1f;2.jdk与jre的区别3.说一下java的一些命令&#xff0c;怎么运行一个jar包4.简单说一下java数据类型及使用场景5.Map跟Collection有几种实现&#xff1f;6.面向对象的特性7.重载和重写的区别8.重…...

第八章:枚举类与注解

第八章&#xff1a;枚举类与注解 8.1&#xff1a;枚举类的使用 ​ 类的对象只有有限个&#xff0c;确定的。我们称此类为枚举类。当需要定义一组常量是&#xff0c;强烈建议使用枚举类。如果枚举类中只有一个对象&#xff0c;则可以作为单例模式的实现方式。 如何定义枚举类 …...

Ceph介绍

分布式存储概述 常用的存储可以分为DAS、NAS和SAN三类 DAS&#xff1a;直接连接存储&#xff0c;是指通过SCSI接口或FC接口直接连接到一台计算机上&#xff0c;常见的就是服务器的硬盘NAS&#xff1a;网络附加存储&#xff0c;是指将存储设备通过标准的网络拓扑结构&#xff…...

remove 和 erase 的区别

remove 和 erase 的区别 以容器vector来说明remove和erase的区别 在STL中&#xff0c;vector容器也提供了remove()和erase()函数&#xff0c;用于从vector中删除元素。虽然这两个函数都可以实现删除元素的功能&#xff0c;但是它们之间还是有一些区别的。 remove() remove(…...

Chatbot Arena排行榜单实战指南:从数据采集到模型优化

Chatbot Arena排行榜单实战指南&#xff1a;从数据采集到模型优化 在构建和优化自己的对话AI时&#xff0c;我们常常面临一个核心问题&#xff1a;如何客观、全面地评估它的性能&#xff1f;闭门造车式的测试往往带有主观偏见&#xff0c;而Chatbot Arena这类公开的排行榜单&a…...

具身智能:千亿赛道崛起、多元场景落地与数据标注协同发展

2025被称为“具身智能元年”&#xff01; “具身智能” 也首次被写入中国《政府工作报告》&#xff0c;纳入国家战略规划&#xff0c;各地密集出台专项政策布局赛道。 数据标注作为具身智能涌现的核心基石&#xff0c;也同步完成了从劳动密集型向高技术专业化的范式升级。 具…...

别再傻傻用二维数组存大矩阵了!手把手教你用C++实现稀疏矩阵的三元组压缩(附完整代码)

稀疏矩阵高效存储实战&#xff1a;从三元组压缩到十字链表的C实现 当你在处理一个1000010000的矩阵&#xff0c;却发现其中99%的元素都是零时&#xff0c;传统的二维数组存储方式就像用集装箱运输几颗散落的珍珠——浪费了巨大的空间和运输成本。这种"稀疏"场景在科学…...

C++ 无原生 JSON 支持?一文实现通用序列化与反序列化封装方案

前言 在现代软件开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;因其轻量级和易读性成为数据交换的主流格式。C虽无原生JSON支持&#xff0c;但通过封装第三方库&#xff08;如nlohmann/json&#xff09;&#xff0c;可高效实现序列化&#xff08;…...

PhysX 5.1入门实战:从Hello World到刚体模拟的完整流程解析

PhysX 5.1入门实战&#xff1a;从Hello World到刚体模拟的完整流程解析 在游戏开发和物理仿真领域&#xff0c;PhysX引擎一直以其强大的性能和易用性著称。作为NVIDIA旗下的物理引擎解决方案&#xff0c;PhysX 5.1版本带来了更多优化和新特性。本文将带您从零开始&#xff0c;通…...

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large 想试试最新的MogFace-large人脸检测模型&#xff0c;但手头没有现成的云GPU服务器&#xff1f;或者想先在本地环境里跑通流程&#xff0c;验证一下效果再上云&#xff1f;今天就来分享一个非常实用的方法&#xf…...

VMware Workstation 16保姆级教程:Windows Server 2019虚拟机安装全流程(含避坑指南)

VMware Workstation 16实战指南&#xff1a;Windows Server 2019虚拟机高效部署与深度优化 在数字化转型浪潮中&#xff0c;本地虚拟化环境搭建已成为开发者和运维人员的核心技能。作为业界标杆的VMware Workstation 16与Windows Server 2019的组合&#xff0c;能够完美模拟企业…...

RWKV7-1.5B-g1a镜像优势解析:离线加载兼容+软链修复+日志分级排查设计

RWKV7-1.5B-g1a镜像优势解析&#xff1a;离线加载兼容软链修复日志分级排查设计 1. 平台简介与核心能力 rwkv7-1.5B-g1a是基于新一代RWKV-7架构的多语言文本生成模型&#xff0c;专为轻量级应用场景优化设计。该镜像经过工程化改造&#xff0c;在保持原模型优秀生成能力的同时…...

字节跳动“卷”到离谱!裸辞后我投身大模型风口,90天逆袭成“AI小子”!

个人自我介绍 鄙人出生于南方小乡镇&#xff0c;为了走出小镇&#xff0c;在当地够拼够努力&#xff0c;不是自夸&#xff0c;确确实实也算得上“别人家的小孩”&#xff0c;至少在学习这件事情少&#xff0c;没有要家里人操过心。 高考特别顺利&#xff0c;一个老牌985&#x…...

保姆级避坑指南:用Python预测波士顿房价,你的MSE为什么降不下来?

Python实战&#xff1a;波士顿房价预测模型MSE居高不下的7个关键排查点 当你第一次尝试用线性回归预测波士顿房价时&#xff0c;最令人沮丧的莫过于看着训练损失曲线反复横跳&#xff0c;而测试集的MSE&#xff08;均方误差&#xff09;却像被钉在墙上的蝴蝶标本一样纹丝不动。…...