有关Relocations in generic ELF (EM: 8)错误的解决方法

该问题源于makefile配置中,链接器使用了新版本的g++,但编译源文件时使用的仍然是旧的编译器。解决方法包括设置环境变量确保使用新编译器进行编译和链接,或者直接在makefile中为编译C++文件指定新的编译器规则。首先需要安装新编译器,然后通过设置环境变量或修改makefile命令行选项来应用正确编译器。
摘要由CSDN通过智能技术生成

待写。。。

The problem is you've set your makefile up to link with the new g++ but you haven't changed the compiler you're using to build the objects in the first place.

The easiest way to fix this is to set environment CXX to the next compiler, i.e.

export CXX=/home/matt/CodeSourcery/bin/arm-none-linux-gnueabi-g++
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题涉及到ELF格式文件中的relocation部分。relocation是指在代码执行时需要动态绑定或修改的地址,例如函数调用或全局变量。在ELF文件中,relocation记录了需要修改的地址和修改方式。em:40是指对应的ELF文件所使用的架构为x86-64。 ### 回答2: Relocations in generic ELF(Executable and Linkable Format)是指在编译和链接过程中需要对代码或数据进行修改的操作。这些修改通常是由于跨越链接时不同的内存布局而导致的。 在ELF文件中,每个节(section)都有一个对应的重定位节(relocation section),它记录下了需要修正的地址和修正方式。重定位表(entry)通常包括了被修正的段(section)、修正的地址、修正的类型(relocation type)以及必要的符号信息(symbol information)等。 重定位是在链接时完成的,用于将不同的目标文件中的符号链接到正确的地址。在链接器将所有目标文件链接成一个可执行文件时,需要对每个符号进行重定位。在这个过程中,链接器根据重定位表中的信息计算出被修正的地址和修正方式,并将这些信息保存在可执行文件中,最终得到一个可以在特定的内存位置上运行的可执行文件。 总之,重定位是ELF格式中非常重要的一部分,它确保了可执行文件可以在不同的内存位置上正确运行。了解重定位的机制,可以帮助我们更好地理解可执行文件的链接过程。 ### 回答3: 在 ELF(Executable and Linkable Format)文件中,重定位是指在程序加载时,调整程序的代码和数据的地址的过程。在ELF文件的头部中,有一个字段称为节头表(Section Header Table),它包含了程序的各个部分,如代码、数据、符号表等等。而在重定位中,涉及的主要是代码和数据。每个代码或数据段都是由一个或多个节(Section)组成的,而每个节都描述了它在文件中的位置和在内存中的位置。 重定位的目的是使程序能够正确运行,并能够在任何地址空间中执行。当程序被加载时,操作系统负责找到每个段在内存中的位置,并将其复制到正确的位置。操作系统也修改了代码和数据中的地址,以便它们指向正确的位置。这个过程中,需要发现程序中所有的重定位项(Relocation Entries),并将它们修改为正确的地址。在读取完整个 ELF 文件后,我们可以看到每个节标志(Section Flag)设置中是否包含了 RELA 或 REL(Relocation) 标志。这就意味着 ELF 文件需要进行重定位的节。 重定位项保存在程序的重定位表中。这个表在 ELF 文件的数据段(.data 或 .rdata)中。对于 64 位的 ELF 文件,重定位项的类型是 RELA,包含了重定位节的偏移量、重定位的地址、重定位的类型和重定位的符号。对于 32 位的 ELF 文件,重定位项的类型是 REL,只包含了重定位节的偏移量和重定位的地址。重定位项类型中保存了一个数值,它指示了将要执行的操作和模式。 总之,重定位是 ELF 文件中一个重要的概念。它们允许程序动态地调整其代码和数据在内存中的位置,以便在任何地址空间中执行。重定位项和重定位表则是实现这个过程的工具和手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值