json-c库交叉编译时报错

json-c库交叉编译时报错

  • 关注点
  • 错误出现的场景
  • 错误描述
  • 解决办法
  • 为啥?
    • 原因分析
    • 解决步骤
      • 总结
  • 怎么看出来的?
  • 哦!get新知识

关注点

看文章前,我先告诉你重点,给我死死盯准文章里的EM: 3 !!!!!!!!!!!!!!!!!

错误出现的场景

./autogen.sh
./configure --host=arm-linux CC=arm-linux-gcc --prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/
都没报错,
make的时候就报错

错误描述

d: .libs/linkhash.o: Relocations in generic ELF (EM: 3)
/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/…/…/…/…/arm-none-linux-gnueabi/bin/ld:
.libs/linkhash.o: Relocations in generic ELF (EM: 3)
.libs/linkhash.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[1]: *** [libjson.la] 错误 1
make[1]: Leaving directory `/home/FriendlyArm/json-c-master’
make: *** [all] 错误 2

解决办法

make clean一下

为啥?

错误信息表明在链接过程中遇到了架构兼容性问题。尽管你已经使用 configure 指定了正确的交叉编译器和主机类型,但仍然在构建 json-c 库时遇到了问题。错误中指出 .libs/linkhash.o 文件是为不同的架构编译的,其 ELF(Executable and Linkable Format)头部标识(EM: 3)表示它是为 Intel 80386 架构编译的,这与目标 ARM 架构不兼容。

原因分析

构建过程中的文件混淆:可能在之前的构建中生成的 .o 文件没有被清理,或者在配置过程中某些环境设置导致错误地使用了默认的编译器而不是交叉编译器 arm-linux-gcc。

解决步骤

  1. 彻底清理构建环境:

在重新构建之前,运行 make clean 或更彻底地删除构建目录下的所有生成文件,确保没有旧的或为错误架构编译的文件残留。

make clean或者
rm -rf .libs *.o
  1. 重新运行 autogen 和 configure:

确保 autogen.sh 和 configure 脚本没有遗漏任何配置步骤。特别注意 configure 命令中的参数是否正确传递给了构建系统。

./autogen.sh
./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/ CC=arm-linux-gcc
  1. 监控编译过程:

在运行 make 时,仔细观察是否有任何提示可能指向编译器配置错误或使用了错误的编译器。有时 configure 脚本可能正确配置了初始设置,但实际编译过程中可能由于路径或环境变量设置问题使用了错误的工具。
4. 检查环境变量:

确保 PATH 环境变量中交叉编译器的路径优先级高于系统默认的编译器路径。

export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
  1. 确认 make 使用的编译器:

你可以在 make 命令中添加 V=1(或在某些Makefile中可能是 VERBOSE=1),以显示更多编译和链接过程的详细信息:

make V=1

这将帮助你验证是否真正使用了 arm-linux-gcc 作为编译器。

  1. 重新审查 configure 日志:

检查 config.log 文件以确认 configure 脚本是否真正识别并配置了所有的参数,尤其是交叉编译器相关的设置。

总结

二进制文件架构不兼容,生成的二进制文件不适合目标ARM环境。

怎么看出来的?

.libs/linkhash.o 文件是为 Intel 80386 架构编译的结论,主要是基于错误信息中的 EM: 3 标记。在 ELF (Executable and Linkable Format) 文件头部,EM 代表机器类型,是用于区分文件是为哪种处理器架构编译的。EM: 3 对应于 ELF 标准中定义的 EM_386,表示这个文件是为 32 位 Intel 80386 CPU 架构编译的。

在处理交叉编译问题或编译错误时,识别出文件是为错误的处理器架构编译的是解决编译错误的关键步骤。这通常意味着编译时使用的编译器不是为目标平台配置的,可能是由于配置错误、环境变量设置不当或其他原因导致默认编译器被错误使用。

这种情况在使用交叉编译环境时尤其常见,例如,如果你正在为 ARM 处理器编译,但是构建系统错误地使用了为 x86 架构配置的编译器,就会出现类似的错误。

要验证这一点,可以使用 file 命令检查 .o 文件的架构,如:

file .libs/linkhash.o

这将返回文件的详细信息,包括它是为哪种架构编译的。如果结果显示是为非 ARM 架构编译,这就确认了问题所在,并且需要调整编译器设置或修正交叉编译配置以确保使用正确的编译器。

哦!get新知识

make中的 EM: 3一般就代表架构不兼容,你window系统上的文件肯定不能直接兼容Linux系统吧

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

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

相关文章

[leetcode] 705. 设计哈希集合

不使用任何内建的哈希表库设计一个哈希集合(HashSet)。 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key 。 bool contains(key) 返回哈希集合中是否存在这个值 key 。 void remove(key) 将给定值 key 从哈希集合中删除。如果哈希…

WebKit的使用技巧

WebKit是一个开源的浏览器引擎,广泛应用于多种浏览器和应用程序中,用于渲染网页和处理用户界面。在使用WebKit时,有一些技巧和注意事项可以帮助开发者更高效地利用这个强大的工具。 1. 理解WebKit的架构:WebKit由多个模块组成&am…

数据可视化高级技术Echarts(堆叠柱状图)

目录 一.如何实现 二.代码展示 1.stack名称相同(直接堆叠) 2. stack名称不相同(相同的堆叠,不同的新生成一列) 一.如何实现 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。即在series中…

【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL

前言 本文主要讲述MySQL中4中SQL语言的使用及各自特点。 SQL语言总共分四类:DDL、DML、DQL、DCL。 SQL-DDL | Data Definition Language 数据定义语言:用来定义/更改数据库对象(数据库、表、字段) 用途 | 操作数据库 # 查询所…

LeetCode 128.最长连续数列

目录 题目描述 方法一 思路: 代码: 方法二 思路: 代码: 题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n)…

playwright: context添加了“has_touch“:True的值导致页面点击事件失效

问题 录制脚本的时候页面上的可以点击,然后debug的时候不可点击,经过排查发现是在创建context时,browser.new_context()中添加了"has_touch":True,导致pc版本的web部分点击事件失效 解决方法 "has_touch"的…

SMS垃圾短信识别项目

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 项目背景 随着数字通信的快速发展,垃圾短信成为了一个普遍而烦人的问题。这些不请自来的消息不仅打扰了我们的日常生活,…

从零全面认识 多线程

目录 1.基本概念 2.创建线程方式 2.1直接建立线程 2.2实现Runnable接口 3.3实现Callable接口 3.4 了解Future接口 Future模式主要角色及其作用 3.5实例化FutureTask类 3.实现线程安全 3.1定义 3.2不安全原因 3.3解决方案 3.4volatile与synchronized区别 3.5Lock与…

【Linux】命名管道的创建方法基于命名管道的两个进程通信的实现

一、匿名管道和命名管道的区别 匿名管道由pipe函数创建并打开。 命名管道由mkfifo函数创建,打开用open FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后&am…

创建线程池的例子

public class ExecutorTest {public static void main(String[] args) {//创建线程池的5种方式: // Executors.newFixedThreadPool();//创建固定线程数的线程池 // Executors.newSingleThreadExecutor();//创建单线程的线程池 // Executors.ne…

Geeker-Admin:基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架

Geeker-Admin:基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架 一、引言 随着技术的不断发展,前端开发领域也在不断演变。为了满足现代应用程序的需求,开发人员需要使用最新、最强大的工具和技术。Geeker-Admin正是…

如何安全地设置MySQL数据库的IP白名单

设置MySQL数据库的IP白名单是一种关键的安全措施,可以确保只有来自特定IP地址的请求被允许访问数据库服务器。这里是如何安全地配置这些设置的分步指南。 步骤1: 登录到MySQL服务器 首先,使用管理员权限登录到你的MySQL服务器。如果你使用的是命令行&a…

activiti初次学习

源代码地址:https://gitee.com/ZSXYX/activiti.git​ 1、安装插件 首先安装下图所示activiti,不确定是哪个插件有用的,有时间可排除下 在resources下创建一个文件夹:processes,右键,新建 生成: 选中act.bpmn20.xm…

【C++】模拟list

list的模拟真的很震撼,第一次学习时给我幼小的心灵留下了极大地冲击 接下来我们一起看看list模拟究竟是怎样一回事 目录 节点的封装:list类的实现:私有成员变量:构造函数:push_back && pop_back: 迭代器类的实…

基于ICEEMDAN-SVD的信号去噪算法

一、代码原理 ICEEMDAN-SVD算法是一种结合了Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise (ICEEMDAN) 和奇异值分解 (SVD) 的信号去噪方法。这种算法结合了两种先进的信号处理技术,旨在提高信号去噪的效果。以下是该算法的基本原…

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏&#xff0c;又增加了哔哩哔哩搜索和必应搜索. <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"…

shell-将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

应用场景&#xff1a;防止恶意IP尝试ssh登录 脚本说明&#xff1a;将密码输入错误超过四次得ip地址通过iptable防火墙访问。 分析&#xff1a; 首先&#xff0c;需要知道ssh远程访问记录在哪一个文件中 /var/log/secure 其次&#xff0c;模拟远程访问输错密码&#xff0c;查…

Vulnhub靶机 DC-1渗透详细过程

Vulnhub靶机:DC-1渗透详细过程 目录 Vulnhub靶机:DC-1渗透详细过程一、将靶机导入到虚拟机当中二、攻击方式主机发现端口扫描web渗透利用msf反弹shell数据库信息web管理员密码提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.com/entry/dc-1-1,29…

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…

685. 冗余连接 II

685. 冗余连接 II 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 685. 冗余连接 II https://leetcode.cn/problems/redundant-connection-ii/description/ 完成情况&#xff1a; 解题思路&#xf…