首页 > 其他分享 >”file not recognized: file format not recognized“错误,不同架构动态库交叉编译的学习记录

”file not recognized: file format not recognized“错误,不同架构动态库交叉编译的学习记录

时间:2023-04-11 13:44:31浏览次数:53  
标签:架构 format recognized 编译 file arm 下载

在学习modbus协议时,发现了一些关于libmodbus库编译的问题

 

我将虚拟机作为客户端,树莓派作为服务器端,分别编写modbus-tcp协议的客户端/服务器端代码

在ubuntu虚拟机上可以成功编译,但是在树莓派上会报:”file not recognized: file format not recognized“错误

 

下面是关于”file not recognized: file format not recognized“错误“的常见原因

 

通过file命令查看动态库信息:

寻找了半天原因是因为ubuntu虚拟机(x86)和树莓派架构(arm)不同 ,因此我应该下载对应架构(arm)的libmodbus动态库文件

 

可以通过:下面命令查看架构信息或者详细信息

uname -m

uname -a

 

树莓派上架构:

 

 

附上arm架构的libmodbus动态库下载地址:Debian -- 在 stretch 中的 libmodbus5 软件包详细信息

 

 我第一次下载时错下成了arm64版本的lib,实际上应该下载armhf版本(对应armv71)

以下是一些拓展:

通过wget下载,下载的db文件通过”dpkg -x xxx.deb  文件路径”解压

 

我这里解压到arm-libmodbus文件夹中

 解压成功后文件夹中会出现usr目录

 

 一层层找最后找到我们需要的动态库文件

此时去编译写好的.c文件,注意:因为我当前使用的是pc上的ubuntu虚拟机,架构为x86,而我想通过arm架构的libmodbus动态库生成能在树莓派运行的可执行文件,因此这里涉及交叉编译相关知识。应该在ubuntu虚拟机下载交叉编译器,使得能编译出arm架构的可执行文件

 

交叉编译器我通过 " sudo apt-get install gcc-arm-linux-gnueabihf " 下载     (注意交叉编译器也有架构对应(hf))

 

 

编译时需要指定动态库路径(-L)和头文件路径(-I),也可以修改环境变量或者/usr/lib等方式,这里不再赘述。

 

如果你没有下载头文件,可以通过下面的命令下载,它默认保存在  /usr/include/modbus/目录中,编译时头文件路径指定为这里即可.

 

sudo apt-get install libmodbus-dev

 

 

 

 

 成功。

 

不知道在树莓派(或者arm架构设备)上直接使用sudo apt-get install libmodbus5 会不会直接能下载对应架构的库文件,我这里因为没有服务器root权限因此通过交叉编译器来完成。

标签:架构,format,recognized,编译,file,arm,下载
From: https://www.cnblogs.com/genm/p/17305876.html

相关文章

  • gzip 解压文件报错 gzip.BadGzipFile: Not a gzipped file (b'\n')
          因为获取的是Unicode码,需要decode才会正常解决办法:按行获取然后......
  • ubuntu 编译出现错误fatal error: bits/libc-header-start.h: No such file or direct
    在ubuntugcc编译程序出现错误fatalerror:bits/libc-header-start.h:Nosuchfileordirectory表明缺少库环境。解决方法aptupdateapt-getinstallgcc-multilib成功编译......
  • git pull时,提示Your local changes to the following files would be overwritten by
    问题描述:本地修改了代码后,执行“gitpull”命令时,无法更新代码,并报错提示:“Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge” 问题原因:是因为本地修改的代码与git服务器的代码冲突导致。如果不冲突,会自动更新合并代码。 gitpull冲突的解决办......
  • docker dockerfile模版文件
    目录dockerdockerfile模版文件dockerdockerfile模版文件#参数ARGMy_Master=liwenchao1995FROM${My_Master}/hexo:v01#注明坐车[email protected]#标签LABELDesc_By="liwenchao"#设置工作目录WORKDIR /opt/hexoADDecs.tar.gz/usr/share/nginx/html#......
  • Qt for Android QtQuick应用程序 USB连接手机调试运行错误:adb: failed to *.apk: No s
    1.场景Windows11、Qt6.5.0QtQuick应用程序USB连接手机调试运行。2.错误信息adb:failedto*.apk:NosuchfileordirectoryInstallingtodevicefailed!进程"C:\Users\Administrator\Qt\6.5.0\mingw_64\bin\androiddeployqt.exe"退出,退出代码16。安装应用失败,发生未知错......
  • 使用浏览器api操作本地文件 File System Access API
    学习新的浏览器api:showOpenFilePicker,showDirectoryPicker,getDirectoryHandle,getFileHandle,removeEntry之前文件上传使用的是:<inputtype="file">今天看到直接使用浏览器api即可实现文件读取,文件删除,写入等,局限性:需要https环境,如果是本地localhost不受此限制。不能在ifr......
  • (第八篇)__format__、__hash__、__init_subclass__、__reduce_ex__、__reduce__、__si
    一、__format__(self,format_spec)当我们使用format()方法对一个对象进行格式化时,如果这个对象有__format__方法,那么这个方法就会被调用。它接受一个变量作为参数,并返回一个格式化后的字符串。classPerson:def__init__(self,name,age):self.name=name......
  • failed to solve with frontend dockerfile.v0
    问题描述didi@didis-MacBook-Proipmi_exporter%dockerbuild-tipmi_exporter:0.1.[+]Building0.1s(1/2)=>[internal]loadbuil......
  • 监听 input type=file 文件上传取消事件
    在做项目的时候,需要根据是否上传图片,(前提是已经上传文件,再次上传取消时,监听取消事件)进而判断页面变化。通过查阅相关资料,发现change事件并不能监听取消,于是从另外一种角度:判断上传的文件是否有值,进而监听取消事件。代码如下:<inputtype="file"name="file"id="fileToUpload"a......
  • Android LiveData Transformations怎么使用
    AndroidLiveDataTransformations是LiveData库中的一个类,它提供了一些便捷的方法来转换LiveData的数据。使用LiveDataTransformations需要在项目的build.gradle文件中添加以下依赖项: implementation'androidx.lifecycle:lifecycle-extensions:2.2.0'接下来可以在Vi......