项目场景:
自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的时候编译才是交叉编译。否则就是正常编译。