.so: file not recognized: file format not recognized

项目场景:

自Linux 4.8起,传统的GPIO sysfs接口被弃用。libgpiod操作gpio的方式感觉更加方便。 但是单板上好像没装这个工具,又到了熟悉的交叉编译环节(痛苦)。


问题描述

按照流程装完libgpiod,自信地去交叉编译程序,果然,还是不能太相信自己。在编译时出现 libgpiod.so: file not recognized: file format not recognized 问题???
在这里插入图片描述


原因分析:

英文提示是文件格式不对。 于是file libgpiod.so.3.0.0 查看动态库,发现居然是x86架构的。

注:不要file libgpiod.so, 它是个软链接。 利用 ls libgpiod.* -l 查看软链接的文件为 libgpiod.so.3.0.0

在这里插入图片描述
没办法,只能重装了。再一次安装的时候,发现之前运行脚本./autogen.sh 的时候 没有指定–host参数,host不指定就会按照build来定义(哭死)。

解决:

./configure host=arm-none-linux-gnueabi --enable-tools=yes --prefix= $(安装绝对路径)

随便回顾回顾 交叉编译的参数配置

./configure --build=编译平台 --host=运行平台 --target=目标平台 [各种编译参数]
#--host:  运行主机, 表示我们把这个编译好的 gcc 在什么样的平台下运行。host不指定就会按照build来定义一般是工具链的前缀。可以arm-linux-gnueabihf-gcc -v查看
#--build:  编译主机  表示编译程序的平台是什么。可以利用 gcc -v 查看
#--target: 该参数的目的是让配置程序知道这个软件被编译后使用来处理什么平台上的文件的。

host !=build的时候编译才是交叉编译。否则就是正常编译。

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值