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,一经查实,立即删除!

相关文章

如何进行嵌入式软件的测试和认证

嵌入式软件是指被安装在嵌入式设备中的软件,例如数字电视、洗衣机、手机游戏等。嵌入式软件经过分析、设计和编码后,必须被烧入硬件环境才能运行,因此嵌入式软件测试是针对嵌入式系统的特殊测试方法。 嵌入式软件调试,主要有以下…

代码随想录算法训练营一刷总结篇

去年12月份的时候开始陆续刷题,开始刷了半个多月,后来因为研究生开题答辩,停刷了半个月,到1月上旬又是拖了一个星期才开始继续刷的。感觉自己一个人刷题经常就会因为一些事情,很容易就停刷;刷过的题也不记得…

Linux 上清理 SSSD Cache

1. 简介 系统安全服务守护程序 (SSSD) 提供对身份和身份验证提供程序的访问。 基本上,SSSD 不依赖于本地配置的身份验证,而是用于查找其本地缓存。 此缓存中的条目可能来自不同的远程身份提供商,例如 LDAP 目录、FreeIPA 或 Active Director…

HOT100与剑指Offer

文章目录 前言一、763. 划分字母区间(HOT100)二、6. 从尾到头打印链表(剑指Offer)总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划刷完hot100和剑指Offer的刷题计划,加油! 根据要…

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 本题就是统计有多少个字母的大小写同时出现…

架构权衡评估方法(ATAM):一种用于软件架构评估的方法,全称为Architecture Tradeoff Analysis Method

架构权衡评估方法(ATAM)是一种用于软件架构评估的方法,全称为Architecture Tradeoff Analysis Method。它由卡梅隆大学软件工程协会提出,旨在通过分析软件系统的各种架构特征,对系统进行全面的评估,以便在各种可能的方案中做出最佳的决策13。ATAM的核心是结合质量属性效用…

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…

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

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

IO综合练习

一.文件拷贝 拷贝一个文件夹,需要考虑子文件夹 import java.io.*;public class IO {public static void main(String[] args) throws IOException {File f new File("C:\\Users\\21566\\IdeaProjects\\untitled");File copy new File("C:\\Users…

bug是测不完的,根本测不完

恼火,测不完的bug,异常场景的bug要测,样式的问题要测,一旦变动一个需求,还要全盘通策,活生生的卖命啊! 简直不知道要怎么测试了。 那就只走正常的业务流程,时间多再异常场景测试吧。…

基于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预测 仅通过前向传播过程,就可以对测试图数据进行高效的特征提取和准确预测模型的训练过程在完全不同的图数据上进行,在训练阶段不接触测试…