Relocations in generic ELF (EM: 62)

这几天把识别算法从ubuntu x86平台移植到arm平台,运行代码出现logoutput.o:Relocations in generic ELF (EM: 62),原因是由于库的不匹配导致的,,然后检查代码调用了opencv库和相机库,,在pro中注释对这两个库的调用,错误依旧;

随后切换到库目录下,对so 文件使用file 命令查看,运用命令file +库名,查看库所支持的架构:

查询得知opencv库和相机库都是支持arm架构,然后定位到错误原因,logoutput.o:Relocations in generic ELF (EM: 62),发现是logoutput.o库的原因,file logoutput.o,发现是支持x86-64架构,然后在pro中注释掉logoutput.h和logoutput.cpp的调用,出现其他库的错误generate6Point.o,同样file generate6Point.o:

所以这些库都是在x86-64下生成的,直接拷贝过来不适用于arm架构,要在arm架构下重新生成,所以将文件夹下的*.o文件全部删除,然后重新生成;

然后需要修改Makefile的编译路径,打开Makefile文件可以看到:

可以看到Command:后的qmake路径是在/usr/lib/qt5/bin/qmake下的,这是之前x86-64的qmake路径,需要换成目前arm平台下的qmake路径,首先查找qmake路径,通过以下命令:

然后通过vim或者gedit打开Makefile,将Command:后的qmake路径替换为/usr/bin/qmake,重新编译即可通过。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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 文件中一个重要的概念。它们允许程序动态地调整其代码和数据在内存中的位置,以便在任何地址空间中执行。重定位项和重定位表则是实现这个过程的工具和手段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值