解决relocation truncated to fit 问题

GCC 编译错误 relocation truncated to fit: R_X86_64_32S against `.bss' 问题如下图所示:(.text+0x53a): relocation truncated to fit: R_X86_64_32S against `.bss'     以前在linux中编译程序,从来没有遇到过这种问题,今天第一次遇到。查了一些资料发现时内存的限制,自己还有些疑问,以前编译内存大小是4G的程序都没出现过这种错误。       看到一些博文中说是内存超过2G会出现问题。需 阅读详情
AI摘要

文章讲述了在RISC-V架构下遇到的编译错误,涉及跳转指令超出目标地址范围。提供了解决方案,包括优化代码、使用位置无关代码选项、调整链接器设置以及修改汇编代码中的跳转指令。

本问题在RISC-V架构下进行讨论,其他架构可做参考。

问题报错:

D:user/riscv/start.S:(.bsp_start_text+0x42):relocation truncated to fit: R_RISCV_JAL against symnol 'bootsys' defined in .textbootsys section in D:user/riscv/riscv/boot.a(boot.o)

这个错误通常是由于编译器尝试在生成的可执行文件中使用了超出目标地址范围的跳转指令引起的,这可能是因为程序太大,导致某些跳转指令的目标地址无法用一个32位的相对地址表示。

解决办法:

1、优化代码以减小程序大小;
2、编译时考虑添加 -fPIC 选项以生成位置无关代码(Position Independent Code),这有助于减少一些链接时的问题;
3、编译时尝试添加 -ffunction-sections -fdata-sections 选项来将函数和数据放置到单独的段(section)中,这有助于优化链接器的处理;
4、编译时使用 -mcmodel=medany,使64位代码模型的全局符号在-2GB~+2GB的虚拟内存地址空间范围内寻址;


5、在start.S汇编代码中查询关于bootsys相关的跳转指令,将"j bootsys"替换为"tail bootsys",因为tail指令的寻址范围更大。

通过以上5个步骤或其中之一,即可完美解决"relocation truncated to fit

"问题。

深入解析GCC连接器错误:relocation truncated to fit的根源与实战修复策略 本文深入解析GCC连接器错误'relocation truncated to fit'的根源与实战修复策略。详细探讨了指令集架构限制、大型二进制文件问题及位置相关代码挑战,并提供了代码拆分、编译器选项调优和连接器调整等解决方案,帮助开发者有效解决这一常见编译问题。 阅读详情

相关推荐

bl跳转指令使用错误导致编译出现错误--relocation truncated to fit: R_ARM_PC24 init_irq

bl 跳转指令只能在+/- 32MB内跳转:

ychongx的专栏 3002

Relocation truncated to fit解决办法

这种情况一般出现在汇编代码中。有些跳转指令的跳转范围很小。而当要跳转到的地址超出了范围,那么就会报错! 对于x86: 最终的原因是使用参数-mcmodel=kernel,只能使用最高2G最低2G的内存空间,如果想使用更多的大内存空间,应该使用-mcmodel=large。 对于ppc: mcmodel对于ppc并不适用,我们在网上搜索找到了-mlongcall参数,加入到base_c...

weixin_44138807的博客 2万+

MIPS64架构下GCC编译报错‘relocation truncated to fit’?试试这3个亲测有效的解决方案

本文深入解析MIPS64架构下GCC编译报错‘relocation truncated to fit’的根本原因,并提供三个经过验证的解决方案。通过智能代码分割、编译器选项调优和链接器高级技巧,有效解决重定向截断问题,特别适用于大型C++项目和嵌入式系统开发。

Faith, Simpleness, Transparency, Innovation 740

ARM 常见问题总结

1、relocation truncated to fit: R_ARM_THM_CALL against symbol 'xxx' 可能的原因有几种: 1、第一种就是如下文所说,超出b/bl 跳转范围,这个可以看编译出来的code 地址来确认。 2、第二种可能是code 所在的section 属性有问题 例如下面这段汇编: test 在 .startup section中,Test2 在 .text section中 test 会调用Test2, 编译过程中会报错:relocation truncate

申小白 6335

手把手教你用-mlong-calls解决GCC链接器‘relocation truncated to fit’报错(附MIPS64实战)

本文深入解析GCC链接器'relocation truncated to fit'错误,特别针对MIPS64架构提供实战解决方案。通过详细讲解-mlong-calls选项的使用方法和原理,帮助开发者有效解决重定向截断问题,提升嵌入式开发和跨平台工程的效率。

Faith, Simpleness, Transparency, Innovation 645

MIPS64项目编译报错‘relocation truncated to fit’?试试这3个GCC/lld连接器配置方案

本文深入解析MIPS64架构下常见的'relocation truncated to fit'编译错误,提供3种GCC/lld连接器配置方案:使用-mlong-calls编译器选项、启用位置无关代码(-fPIC)以及链接器优化控制。通过详细的技术分析和实战案例,帮助开发者有效解决MIPS平台特有的重定向截断问题,提升嵌入式开发效率。

Faith, Simpleness, Transparency, Innovation 355

解决relocation truncated to fit: R_PPC_ADDR24 的问题

  将BSP包makefile中的RAM_HIGH_ADRS 修改为 0x08000000   编译时会报以下错误: intALib.o(.text+0x1fc): relocation truncated to fit: R_PPC_ADDR24 noActionIntEnt 详细问题表述见http://www.vxworksos.info/ae-problem-building-a-bootapp-with-ram_high_adrs-higher-than-0x03f00000  

da895的专栏 7020

告别链接噩梦:手把手教你用CMake配置GCC链接器选项解决‘relocation truncated to fit’

本文详细介绍了如何使用CMake配置GCC链接器选项解决‘relocation truncated to fit’错误。通过分析问题本质、提供CMake工程化解决方案和高级链接控制技术,帮助开发者有效应对代码膨胀导致的重定向范围溢出问题,提升构建效率和项目稳定性。

Faith, Simpleness, Transparency, Innovation 421

解决GCC连接器(lld)出现问题 relocation truncated to fit (重定向截断)

但是缺点肯定是有的,那就是效率肯定没有RVA相对地址(短地址)跳转速度块,因为绝对地址都是需要先放在寄存器之中的,在按照寄存器的值跳转,不能直接JMP到绝对地址上面的,相当于每次都要多走一些流程,并且在CPU之中相对寻址本来就比随机的绝对寻址要快的。这条会有限制,C++ 17 直接没法用了,而且 C++ 11 的一些模板展开特性也会受到限制,基本不是很推荐通过这条指令来解决,但如果真的必须要,无可避免、退无可退的情况下,您或许可以考虑设置它到连接器上面试试看,的确是有效的。3、配置连接器选项,增加选项。

liulilittle的博客 6180

2025华东杯A/B/C题解题思路+可运行代码参考

这些因素包括但不限于:助滑坡的坡度、运动员的质量、滑雪板的接触面与雪地的摩擦力、空气阻力系数、运动员的体型和衣物形态等。助滑坡是运动员滑行至起跳台前的最后一段坡道,这一段坡道的坡度、长度和运动员的姿势会直接影响到起跳时的初始速度。运动员的滑行速度不仅受助滑坡的坡度影响,还受到摩擦力、空气阻力和重力等多方面因素的影响。通过合理的姿势调整,运动员能够有效减少空气阻力,增加身体的重力加速度,进而提升滑行速度。助滑坡的角度通常介于10°到12°之间,而运动员的滑行速度将受到重力、摩擦力和空气阻力的共同作用。

qq_52590045的博客 1796

C++游戏开发实战:从零构建局域网联机对战系统(附完整代码解析)

本文详细介绍了如何使用C++开发局域网联机对战游戏系统,涵盖从环境搭建到实战代码解析的全过程。重点讲解了Winsock库的应用、Socket通信原理、服务端与客户端开发技巧,以及性能优化和安全防护方案,帮助开发者快速掌握C++游戏开发的核心技术。

weixin_42524945的博客 444

relocation truncated to fit: R_MIPS_CALL16 问题!

我在broadcom7309上编译链接库生成程序时,出现以下链接问题。链接库时,出现以下很多类似的错误:relocation truncated to fit: R_MIPS_CALL16 against IsHealthy()relocation truncated to fit: R_MIPS_GOT16 against `g_dwCommsClockrelocation truncat

大大狗之家 1万+

Quartus (Quartus Prime 18.1)的安装及仿真步骤

前两天做计组的课设需要用到Quartus 这个软件,但安装有点麻烦,在网上搜了很多教程,发现都是旧版本的,最后弄了好半天才把环境搭建好。所以,分享一下它的搭建过程。 因为我不经常用它,所以安装的版本是精简版的其他版本的也应该差不多以下是需要下载的安装包: 准备: Quartus Prime 精简版,最新发布: v18.1 1. QuartusLiteSetup-18.1.0.625-wi...

weixin_41082948的博客 8万+

Eclipse 编译器 编译opencv静态库.a 编译出错relocation truncated to fit: R_NDS32_SDA17S2_RELA against `CvIPL'

将opencv 相关函数利用Eclipse打包为静态库.a 时,编译没问题,但是在外部调用该库时出现 问题relocation truncated to fit: R_NDS32_SDA17S2_RELA against `CvIPL' 等问题,网上查找资料说是 静态数组大小超出范围,需要加入优化指令:-mcmodel=large 这里的large 可以修改 middle 等: 具体操作如下...

w77AYU的博客 834

联想拯救者恢复出厂设置全攻略

通过本文介绍的几种方法,你可以轻松地将联想拯救者恢复到出厂系统状态。无论是通过Windows恢复选项、高级启动选项还是一键恢复功能,都能帮助你解决系统问题、清除个人信息或重置软件环境。在重置前,请务必备份重要数据,并确保了解重置的影响。重置完成后,进行适当的系统设置和软件安装,让你的联想拯救者焕然一新,继续为你提供高效、稳定的计算体验。

mmoo_python的博客 3252

GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度

GPU架构经历了从专用计算模块到统一可编程处理器的演进。传统GPU面临专用电路配比难题,Nvidia Tesla架构通过引入可编程多线程处理器实现图形与计算的统一。Fermi架构进一步向计算倾斜,随后的架构陆续加入Tensor Core等专用单元。AI时代促成了从图形处理主导向AI计算的转变,形成了Scalar+Vector+Tensor的混合计算范式。SIMT调度重要性降低,CUDA面临新挑战,RISC-V等架构可能带来新机遇。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 915

SCF1d.c:(.text+0xee8): relocation truncated to fit: R_X86_64_PC32 against symbol `Fel' defined in CO

SCF1d.c:(.text+0xee8): relocation truncated to fit: R_X86_64_PC32 against symbol `Fel' defined in CO 在linux中编译程序,出现以上内存限制问题,编译不通过。       一些博文中说是内存超过2G会出现问题。需要添加编译选项:-mcmodel 调整编译时的对静态数组要求的大

zhangjingxueq的博客 3万+

SIGIR 2026:信息检索前沿技术与投稿指南

信息检索(Information Retrieval, IR)是计算机科学中处理大规模数据检索的核心技术,其基本原理是通过算法模型从海量数据中高效提取相关信息。随着深度学习的发展,神经信息检索(Neural IR)和多模态检索成为研究热点,如稠密检索模型(DPR)和跨模态预训练(CLIP)等技术的应用显著提升了检索精度。这些技术不仅在学术领域具有重要价值,还在电商搜索、医疗检索等实际场景中展现出巨大潜力。SIGIR作为信息检索领域的顶级会议,汇聚了全球顶尖学者和工业界专家,是展示最新研究成果的重要平台。本文

weixin_29189363的博客 285

ARM学习笔记010之Gcc编译新问题

11.27 之前的除法除不出来还没有解决,现在又有以下问题(在不添加raise函数的情况下): 网上说的原因是: I'm getting the "relocation truncated to fit: R_ARM_PC24 against symbol" error message when linking, what does this mean? You w

汉尼拔勇闯天涯 1262

嵌入式Zephyr RTOS面试题及参考答案

在Zephyr中,为自定义外设编写Devicetree绑定(Bindings)有助于内核理解设备树中自定义外设节点的含义和属性。首先,需要创建一个.yaml格式的绑定文件,通常存放在目录下对应的子目录中,文件名应能反映外设的类型和功能。绑定文件的开头要定义基本信息,包括字段,用于简要描述外设的功能和用途;compatible字段,它是一个字符串列表,用于匹配设备树中自定义外设节点的compatible属性,设备树节点和绑定文件通过这个字段关联起来。接下来,要定义外设节点的属性。使用properties。

大模型大数据攻城狮的专栏 983

把云端打印带回办公室:通信场景 SAP_COM_0466 打通 SAP BTP ABAP environment 与本地打印机的 Pull Integration 实战

摘要: 本文探讨云端SAP系统如何通过SAP_COM_0466通信场景实现与本地打印机的安全连接。核心方案采用Pull Integration模式,由本地组件(如SAP Cloud Print Manager或第三方OMS)主动从云端打印队列拉取任务,避免网络边界冲突。配置流程涵盖通信安排创建、打印队列绑定及权限管理,并强调队列类型必须选择"Pull Integration Queue"的关键细节。方案通过分离云端生产与本地打印环节,既保障安全性又便于运维监控,适用于SAP BTP AB

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 139

沁恒CH57x蓝牙(RISC-V)开发记录

沁恒CH57x蓝牙(RISC-V)开发记录,画了块ch571f和ch579m二合一的开发板,ch571是risc-v的芯片,ch579是m0的。之前一直用的stm32,刚接触risc-v开发还是碰到许多需要琢磨半天的问题。

CanEve的博客 4496

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C/C++链接机制详解:重定位如何修正地址

在C/C++工程中,从源码到可执行文件需要经过编译与链接两个阶段。编译阶段,编译器将每个源文件翻译为目标文件,但面对跨文件符号引用时,只能先写入占位值,并生成重定位条目。链接器随后通过符号解析与重定位两步,为每个符号分配最终虚拟地址,并按公式(如S+A-P)修正目标文件中的指令操作数。理解重定位机制,不仅能帮助你读懂readelf -r、objdump -dr的输出,还能从容排查undefined reference、relocation truncated to fit等常见链接错误。无论是静态链接中直接

weixin_34098209的博客 84

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

gcc相关编译选项总结

gcc相关编译选项总结

Andy.Wang的博客 5525

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

交叉编译出错之:reloaction truncated to fit : R_MIPS_CALL16

交叉编译工具链:cross-gcc-4.9.3-n64-loongson-rc6.1 交叉编译出错的日志: /home/loongson/work/common/3rd/lib//3gpp.o: In function `asn1Init_ngap_GUAMI': /home/loongson/work/common/3rd/src/3gpp.c:1441:(.text+0x536c): relocation truncated to fit: R_MIPS_CALL16 against `asn1Init

sense的专栏 2136
上一篇: libbacktrace堆栈回溯函数使用方法
下一篇: Qemu模拟CXL pmem搭建问题记录
Contas
博客等级 码龄7年 26粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值