make编译出错Relocations in generic ELF (EM: 62)

2023-10-30

参考:编译出错Relocations in generic ELF (EM: 62)

  • main.o: Relocations in generic ELF (EM: 62)
    错误信息是:
    在这里插入图片描述
  • 通过查看文件 main.o, 发现ELF 64bit , x86-64,在嵌入式中应该用ARM架构,不是x86
    在这里插入图片描述
  • 解决1:删除main.o 再次 make -j 4
    但是又出现了,其他.o文件,也出现同一的情况
  • 解决2:make clean 再次 make -j 4
    但是又出现了,main.o文件,main.o: Relocations in generic ELF (EM: 62)
  • 解决3:连续执行5次make clean,再次 make -j 4
    问题解决:
    在这里插入图片描述

其实是因为在别人电脑拿到代码,Makefile编译路径不一样,导致的

qmake -o Makefile xxxx.pro

如果是特殊路径的qmake,可以打开Makefile,开头有写Makefile生产方法
在这里插入图片描述

我的执行,
/opt/rk3288/qt-new/bin/qmake -o Makefile Safbox_GUI.pro
就重新生成Makefile了

需要换成你的编译链qmake所在位置

  • 使用whereis qmake 就找到了
    在这里插入图片描述

  1. 预编译 — > 编译 — > 汇编 — > 链接
1、预编译:预处理器对c程序进行一些预处理工作,例如对宏定义的变量进行替换;
    1)将所有的#define删除,并展开所有的宏定义;
    2)处理所有的预编译指令,例如:#if,#elif,#else,#endif;
    3)处理#include预编译指令,将被包含的文件插入到预编译指令的位置;
    4)添加行号信息文件名信息,便于调试;
    5)删除所有的注释:// /**/;
    6)保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来 设定编译器的状态
                                                                    或者是指示编译器完成一些特定的动作;
    最后生成.i文件;
    总的来说,包括(1)去注释 (2)宏替换 (3)头文件展开 (4)条件编译
    
2、编译:编译器将c语言程序翻译成汇编语言程序;
    1)扫描,语法分析,语义分析,源代码优化,目标代码生成,目标代码优化;
    2)生成汇编代码;
    3)汇总符号;
    4)生成.s文件;
    
3、汇编:汇编语言通过汇编器编译成可重定位目标程序.o,与之相反称为反汇编;
    1)根据汇编指令和特定平台,把汇编指令翻译成二进制形式;
    2)合并各个section,合并符号表;
    3)生成.o文件;
    
4、链接:将目标文件和所需的库函数用链接器进行链接,常见的链接器有Unix;
    1)合并各个.obj文件的section,合并符号表,进行符号解析;
    2)符号地址重定位;
    3)生成可执行文件;

预处理:    gcc -E project.c -o project.i //宏展开,宏替换 
编译:    gcc -S project.i -o project.s //将目标文件编译成汇编文件
汇编:    gcc -c project.s -o project.o //汇编成二进制文件
链接:    gcc project.o -o project  //加载库文件,生成可执行文件

注意:
头文件不参与编译

  1. 简单说⼏个你使⽤过的⼆进制⼯具集

gcc g++ gdb
链接器 :ld [将.o文件链接生成一个.elf文件]
目标拷贝/格式化工具 : objcopy [将elf文件转换生成bin的文件]
反汇编工具 : objdump [将elf文件反汇编生成dis的反汇编文件]
查看文件符号表 : nm [查看elf文件的符号表]
查看二进制文件各个段的大小 :size [查看elf文件中各个段的大小]
获取 elf 文件信息的 :readelf [读取elf文件的信息]
压缩文件体积 : strip
根据地址信息定位错误的信息的详细位置信息 :addr2line

3.库有两种:静态库(.a.lib)和动态库(.so.dll

所谓静态、动态是指链接
参考:静态库和动态库的区别



参考:C/C++内存分布

1、malloc/free和new/delete的区别

  • 共同点:

都是从堆上申请空间,并且需要用户手动释放

  • 不同点:
  1. malloc和free是函数,new和delete是操作符

  2. malloc申请的空间不会初始化,new可以初始化

  3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可

  4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型

  5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常

  6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理

2、如何一次在堆上申请4G的内存

对于32位的栈来说虚拟地址空间有2个G的空间大小

对于64位的栈来说虚拟地址空间的空间大小是非常大的

示例:

// 将程序编译成x64的进程,运行下面的程序
#include <iostream>
using namespace std;
int main()
{
	void* p = new char[0xfffffffful];
	cout << "new:" << p << endl;
	return 0;
}

1G = 2^30 Bytes
ul:为无符号长整型
0xffff ffff = 4294967295
(4294967295+1) / 2^30 = 4 G

0x7FFFFFFF = 2147483647
(2147483647+1) / 2^30 = 2 G

  • 平台vs2019x32:
    在这里插入图片描述

  • 平台vs2019x64:
    在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

make编译出错Relocations in generic ELF (EM: 62) 的相关文章

  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 如何在 Linux 中重新添加 unicode 字节顺序标记?

    我有一个相当大的 SQL 文件 它以 FFFE 的字节顺序标记开头 我使用 unicode 感知的 linux 分割工具将此文件分割成 100 000 行块 但是当将这些传递回窗口时 它确实not与第一个部分以外的任何部分一样 只是它具有
  • 在 Docker 容器中以主机用户身份运行

    在我的团队中 我们在进行开发时使用 Docker 容器在本地运行我们的网站应用程序 假设我正在开发 Flask 应用程序app py具有依赖关系requirements txt 工作流程大致如下 I am robin and I am in
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav

随机推荐