GNU链接器(LD):PROVIDE、PROVIDE_HIDDEN关键字介绍

news2024/11/23 21:00:23

0 参考资料

GNU-LD-v2.30-中文手册.pdf
GNU linker.pdf

1 前言

一个完整的编译工具链应该包含以下4个部分:
(1)编译器
(2)汇编器
(3)链接器
(4)lib库
在GNU工具链中,对应的是:
(1)编译器:GCC(GNU Compiler Collection,GNU编译器套件)
(2)汇编器:GAS(GNU Assembler,GNU汇编器)
(3)链接器:LD(GNU Linker,GNU链接器)
(4)lib库:glibc(GNU C Library,GNU C 库)
本文介绍GNU链接器(LD)链接器脚本的PROVIDE、PROVIDE_HIDDEN关键字。

2 GNU链接器(LD):PROVIDE、PROVIDE_HIDDEN关键字介绍

2.1 PROVIDE、PROVIDE_HIDDEN关键字

在某些情况下,链接器脚本想要实现类似于__weak关键字的功能,也就是没被链接过程中任何object文件定义且符号被引用时,符号定义才会生效。
举个例子,传统链接器定义了exext符号,而ANSI C需要把etext当做一个函数名使用且不报错。PROVIDE关键字就可以用来定义符号etext,只有当它被引用且ANSI C未定义才生效。语法如下:

PROVIDE(symbol = expression)

以下是一个使用 PROVIDE 定义 etext 的例子:

SECTIONS
{
	.text :
	{
		*(.text)
		_etext = .;
		PROVIDE(etext = .);
	}
}

在这个例子中,如果程序重定义了_etext(下划线开头),链接器会提示重定义错误(和链接脚本的_etext符号重复了)[实测并不会报告错误]。而如果程序定义etext(不以下划线开头),链接器会使用程序中的定义。如果引用了etext但没有定义它,链接器就会使用在链接器脚本中的定义。
PROVIDE_HIDDEN关键字功能和PROVIDE关键字类似。
实测即使重复定义也不会报告错误(可能新版链接器取消了这种情况下的报错):
链接脚本中的定义:
在这里插入图片描述
C中的定义:
在这里插入图片描述
编译没有报错:
在这里插入图片描述

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

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

相关文章

用布尔表达式巧解数字电路图

1.前置知识 明确AND,OR,XOR,NOR,NOT运算的规则 参见:E25.【C语言】练习:修改二进制序列的指定位 这里再补充一个布尔运算符:NOR,即先进行OR运算,再进行NOT运算 如下图为其数字电路的符号 注意到在OR符号的基础上,在尾部加了一个(其实由简化而来) 附:NOR的真值表 2.R-S触发…

第二十章 番外 混淆矩阵

混淆矩阵(Confusion Matrix)是一种用于描述监督学习中分类模型性能的特定表格布局。它提供了直观的方式来理解分类器的性能,特别是对于多类别分类任务。混淆矩阵通过比较实际类别标签与分类器预测的类别标签来展示分类结果。 混淆矩阵的基本…

2-118 基于matlab的六面体建模和掉落仿真

基于matlab的六面体建模和掉落仿真,将对象建模为刚体来模拟将立方体扔到地面上。同时考虑地面摩擦力、刚度和阻尼所施加的力,在三个维度上跟踪平移运动和旋转运动。程序已调通,可直接运行。 下载源程序请点链接:2-118 基于matla…

Microsoft Edge 离线安装包制作或获取方法和下载地址分享

方法一:自制压缩包 进入目录 "C:\Program Files (x86)\Microsoft\Edge\Application" 或 "C:\Program Files (x86)\Microsoft\EdgeCore\Edge版本号",将所有文件打包,再放到没有安装到 Edge 的电脑里解压,运行…

打破常规,BD仓储物流的效能提升!

当前,随着国家战略的推进,JS与民用领域的融合不断加深,物流业也步入了军民融合的新时代。在智能仓储物流方面,JS物流的智能化进展受到了BD系统的高度关注和重视。 一、建设JS仓储物流RFID基础设施 JS物流领域引入RFID技术的基础工…

入门端到端第一步!最新综述回顾基于深度学习的规划方法发展历程

这篇新的综述,系统的回顾了基于深度学习的预测和规划方法, 端到端方法的发展历程, 非常适合初学者了解领域背景. The Integration of Prediction and Planning in Deep Learning Automated Driving Systems: A Review 0. 摘要 自动化驾驶系统有潜力彻底改变个人、公共和货物…

Cesium 获取当前视角信息

通过 浏览器控制台,直接获取到当前地球视角的信息,然后通过 flyTo 跳转视角。 方法: 控制台内输入下列代码,控制台就会输出视角信息: const camera viewer.camera; const position camera.positionCartographic; c…

Python:条件分支 if 语句全讲解

Python:条件分支 if 语句全讲解 如果我拿出下面的代码,阁下该做何应对? if not reset_excuted and (terminated or truncated):... else:...---- 前言: 消化论文代码的时候看到这个东西直接大脑冻结,没想过会在这么…

高含金量WebGIS学习教程?

智慧校园——适合0基础入门 智慧交通——适合0基础入门 VUE-适合前端进阶 Mapbox项目开发实例 Openlayers零基础入门 智慧机场——适合有前端基础 threejs三维开发入门 三维进阶:cesium零基础入门教程 面试讲解:剖析地信大厂技术面试真题&#x…

【算法】DP系列之 斐波那契数列模型

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)第 N 个泰波那契数 .1- 题目解析 .2- 代码编写 2)三步问题 .1- 题目解析 .2- 代码编写 3)使用最小花费爬楼梯 .1- 题目解析 .2- 代码编写 4)解码…

vue3实现 长列表虚拟滚动

1、直接看代码 <template><!--定义一个大容器&#xff0c;此容器可以滚动--><div class"view" ref"viewRef" scroll"handleScroll"><!--定义一个可以撑满整个data的容器&#xff0c;主要是让父元素滚动起来--><div …

EasyExcel读入数字类型数据时出现小数位丢失精度问题

这里写自定义目录标题 问题现象解决方案 问题现象 目前使用easyExcel读取导入文档时发现文档中的小数值4076204076.65会被读取为4076204076.6500001 尝试去查看了excel解压后的文件&#xff0c;发现这条数据在xml里存储的值就是4076204076.6500001&#xff0c;即是excel存储小…

java中的I/O(8个案例+代码+效果图)

目录 1.File类 1&#xff09;常用构造方法 1&#xff09;File(String pathname) 2&#xff09;File(String parent, String child) 3&#xff09;File(File parent, String child) 2&#xff09;常用方法 1&#xff09;boolean canRead() 2&#xff09;boolean canWrite() 3&am…

诺奖现场采访2024物理学得主Hinton:当前AI革命堪比工业革命,且将在智力上全面超越人类

当地时间昨天&#xff0c;2024年10月8日&#xff0c;瑞典皇家科学院宣布将本年度诺贝尔物理学奖授予两位被誉为AI教父的科学家&#xff1a;约翰J霍普菲尔德&#xff08;John J. Hopfield&#xff09;和杰弗里E辛顿&#xff08;Geoffrey E. Hinton&#xff09;。该奖项旨在表彰他…

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题&#xff0c;即在给定的股票价格数组中&#xff0c;找到一次买入和卖出所能获得的最大利润。 算法思想&#xff1a; 定义两个变量&#xff1a; minPrice: 这个变量用于记录迄今为止遇到的最小股票价格&#xff08;买入价格…

软件项目必须进行验收测试吗?专业验收测试报告如何获取?

软件项目验收测试是一种关键的质量保证活动&#xff0c;旨在确保软件产品符合用户需求和预期功能。它通常是在软件开发完成后&#xff0c;由客户或第三方测试机构进行的最终测试环节。验收测试的目的是确认软件的性能、功能、安全性和其他特性&#xff0c;以确保交付的产品能够…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

5G NR UE初始接入信令流程

文章目录 5G NR UE初始接入信令流程 5G NR UE初始接入信令流程 用户设备向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU…

RK3568启动配置

硬件环境 连上电脑&#xff0c;这时候默认是uboot启动linux&#xff0c;因此我们需要进入uboot的命令行界面&#xff0c;通过网络加载oneos运行。启动后按空格&#xff1a; Rockchip watchdog timeout: 15 sec Net: eth0: ethernetfe2a0000, eth1: ethernetfe010000 Hit key…

视频去水印的3款软件:助你轻松一键去水印

在视频创作的世界里&#xff0c;水印往往是一个让人头疼的问题。无论是从网络上下载的素材&#xff0c;还是其他平台分享的视频&#xff0c;都可能带有水印&#xff0c;影响整体美观。今天&#xff0c;就为大家介绍三款视频去水印软件&#xff0c;它们分别是影忆、Online Water…