gcc,软硬链接和制作动静态库

gcc的操作

预处理

gcc -E file.c -o file.i

-E选项表示预处理完就停下来,在编译时-o file.i可以省略,编译器会默认生成同名的.i文件

编译

gcc -S file.i -o file.s

-s表示生成完汇编码就停下来,在编译时-o file.s可以省略,编译器会默认生成同名的.s文件

汇编

gcc -c file.s -o file.o

-c表示转换成机器码就停下来,在编译时-o file.o可以省略,编译器会默认生成同名的.o文件

链接

gcc file.o -o file

不带选项就直接形成可执行文件,-o file不加,编译器默认生成a.out可执行文件

注:有多个源文件时-o不能省略,因为有多个源文件时编译器不知道如何命名。

软链接

软连接本质上是创建一个新的文件,该文件有自己的inode,文件的内容是所连接文件的地址。

指令 : ln -s 源文件 目标文件

硬链接

硬链接本质上是对所连接的文件取别名,该文件没有自己的inode,只是在该文件的目录上建立了文件名和inode的映射关系

指令 : ln 源文件 目标文件

静态库

静态库在连接时是直接将所用函数的代码拷贝到文件当中。静态库要以lib开头,.a结尾

指令:ar -rc 源文件 目标文件

上述指令是对.o文件进行打包

当我们创建好静态库后该如何使用呢?

我们所创建的静态库并不是在系统默认的搜索路径下的,所以要进行如下指令

-(shift+i)  .h文件的路径(不用带文件名,因为文件名在test.c中已经包含,操作系统知道在该路径下寻找哪个文件)

-L .c文件的路径

-l 静态库名(去掉lib前缀,.a后缀)

其它方式

1.将文件拷贝到系统默认的搜索路径下

.h文件:/usr/include

.so/.a库 : /lib64

2.采用软连接的方式将文件拷贝到系统默认的搜索路径下

注:使用了其它方式后一样要指明库名

动态库

动态库在连接时会给调用函数处一个该函数在动态库里的地址。静态库要以lib开头,.so结尾

指令 : gcc -shared -o 目标动态库名 源文件     

我们所创建的动态库并不是在系统默认的搜索路径下的,同静态库一样

其他方法解决这一问题

1.将文件拷贝到系统默认的搜索路径下

.h文件:/usr/include

.so/.a库 : /lib64

2.采用软连接的方式将文件拷贝到系统默认的搜索路径下

动态库的加载解决方案

上述两种方式可以解决

1.将动态库的路径(不用加动态库名,因为链接时已经给过库名)添加到LD_LIBRARY_PATH环境变量下,这一个环境变量时操作系统提供给用户存放动态库路径的

2.在/etc/ld.so.conf.d/路径下创建一个.conf文件,将动态库的路径添加到该文件的内容中,一个.conf只能有一个路径。添加好后再执行ldconfig。

动态库的加载

我们在程序里使用的库接口在链接时会将调用函数处转换成库的起始地址+偏移量,所以在我们将动态库加载到内存当中时是可以在任意位置加载的,然后通过页表将虚拟地址空间和物理内存建立映射关系,但是在虚拟地址空间内会将动态库的起始地址存放在共享区里,

如:libc.so.6 (0x00007f86ecfc8000)

这样操作系统就可以通过起始地址+偏移量的方式访问到对应的函数了。

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

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

相关文章

kaggle电子邮件分类xgboost建模可视化模型评估混淆矩阵范例

目录 概述 依赖环境 代码解读 库的导入 数据读取 扇形图可视化统计 词云图可视化 分布条形图可视化 数据预处理 划分数据集 模型训练 模型预测和评估 ROC曲线评估 混淆矩阵评估 多维度交叉评估 配套源码和数据集 xgboost邮件分类配套数据集和源码下载地址 概述…

DenseDiffusion:Dense Text-to-Image Generation with Attention Modulation

1 研究目的 该文献的研究目的主要是: 探讨一种更为广泛的调制方法,通过设计多个正则化项来优化图像合成过程中的空间控制。论文的大致思想是,在现有的基于数据驱动的图像合成系统基础上,通过引入更复杂的调制策略,实现…

pip下载包opencv出错(报错failed building wheel for opencv-python解决方法)

文章目录 1 报错2 原因3 解决方法参考 1 报错 ERROR: Could not build wheels for opencv-python, which is required to install pypr2 原因 版本不兼容的问题,当使用pip install opencv-python命令安装的是最新版本,当前python版本不支持。需要安装当前版本pyth…

认识产品经理

一、合格的产品经理 1、什么是产品 解决某个问题的东西,称为产品 键盘可以打字,想喝水了可以用水壶,在超市想找一款扫把会有导购员服务 产品有颜色、大小等等区别,也有有形和无形的区别 2、什么是产品经理 想清楚怎么设计产品…

Leetcode - 周赛394

目录 一,3120. 统计特殊字母的数量 I 二,3121. 统计特殊字母的数量 II 三,3122. 使矩阵满足条件的最少操作次数 四,3123. 最短路径中的边 一,3120. 统计特殊字母的数量 I 本题就是统计有多少个字母的大小写同时出现…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

SpringBoot集成Sharding-JDBC实现主从同步

SpringBoot集成Sharding-JDBC实现主从同步 1.mysql主从配置2.application.properties文件配置3.测试3.1 查询数据3.2 添加数据 1.mysql主从配置 详细内容请参考上一篇文章:MySQL8.0以上实现主从同步配置 2.application.properties文件配置 # ShardingSphere conf…

阿斯达年代记怎么下载 阿斯达年代记三强争霸下载教程

阿斯达年代记怎么下载 阿斯达年代记三强争霸下载教程 阿斯达年代记是一款三国争霸类型的游戏,在游戏中大家可以体验到三权争霸的刺激场景,在战场中大家不仅可以体验到体验到文化交织还可以感受到战场的残酷,本期小编将会给大家带来阿斯达年代…

基于vue+node+mysql的视频校对系统

一、登录注册:包括登录,注册,忘记密码,验证码等常用点。 二、用户管理:包括用户的增删改查 三、权限管理(请增加这个权限:任务分配——只有管理者才能发布和删除任务;管理员设置。 四…

R语言绘制动态网络图Network教程WGCNA

今天分享的笔记是使用NetworkD3对WGCNA的共表达网络进行可视化,创建交互式动态网络图,展示基因之间的相互关系,可以用于转录组或者其他调控网络展示。 加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同…

MQTT服务器EMQX的安装和使用(Windows)

一、下载地址: 下载 EMQX 二、安装环境: Windows Server2016 16G 500G 三、启动服务: 下载文件解压后放入以下目录(注意,目录名一定是英文,否则会造成启动不成功!)&#xff1a…

mybatis与mybatisplus

mybatis 基本使用 整合springboot 1.添加依赖 2.添加配置 spring:# 数据源相关配置datasource:username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver#时区必须配置否则报错,注意数据库名切换为自己的数据库名称url: jdbc:mysql://127.0.0.1/ithei…

论文略读:OpenGraph: Towards Open Graph Foundation Models

arxiv 2023 1 intro Graph大模型希望OpenGraph能够捕捉通用的拓扑结构模式,对测试数据进行Zero-shot预测 仅通过前向传播过程,就可以对测试图数据进行高效的特征提取和准确预测模型的训练过程在完全不同的图数据上进行,在训练阶段不接触测试…

【2024年5月备考新增】】软考极限冲刺 《项目质量管理1》

1 知识点 1.1 质量成本 一致性成本 项目花费资金规避失败 预防成本:(打造某种高质量产品) 培训文件过程设备完成时间评估成本:(评估成本) 测试破坏性试验损失检查非一致性成本 项目前后花费的资金(由于失败) 内部失败成本:(项目中发现的失败) 返工报废外部失败成本:…

windows安装nc命令的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

(mac)Prometheus监控之Node_exporter(CPU、内存、磁盘、网络等)

完整步骤 1.启动 Prometheus 普罗米修斯 prometheus --config.file/usr/local/etc/prometheus.yml 浏览器访问 http://localhost:9090/targets 2.启动Node_exporter node_exporter 访问:http://localhost:9100 3.启动grafana brew services start grafana 访问…

力扣146. LRU 缓存

Problem: 146. LRU 缓存 文章目录 题目描述思路复杂度Code 题目描述 思路 主要说明大致思路,具体实现看代码。 1.为了实现题目中的O(1)时间复杂度的get与put方法,我们利用哈希表和双链表的结合,将key作为键,对应的链表的节点作为…

2024年前端技术发展趋势

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

如何用idm下载迅雷文件 idm怎么安装到浏览器 idm怎么设置中文

如果不是vip用户使用迅雷下载数据文件,其下载速度是很慢的,有的时候还会被限速,所以很多小伙们就开始使用idm下载迅雷文件,idm这款软件最大的优势就是下载速度快,还有就是具备网页捕获功能,能够下载网页上的…

ESD+显示模组

ESD测试是指对消费电子设备进行静电放电测试,通常用于检查设备是否具有防静电能力,以及在正常使用过程中是否容易受到静电干扰,通过进行ESD测试,可以评估设备的抗静电能力,并采取相应的措施以提高设备的耐静电性能。 E…