开发板:可执行文件在执行时提示not found

背景

我是ubantu下编译的,到开发板中运行

分析

(在确保文件没有损坏,文件是正常的前提下)可能的原因:权限问题、动态链接库问题,或者可能是环境变量?

先分析权限问题

(执行ls -l 查看文件权限,执行chmod +x设置执行权限)

执行ls -l : 输出是-rwxr-xr-x 1 root root ,可以看到是可执行的

执行uname -m查看cpu架构,再执行file 命令确认一下,都是arm架构

执行cat /proc/version查看内核版本信息

root@TinaLinux:/usr/bin# cat /proc/version
Linux version 4.9.191 (book@100ask) (gcc version 5.3.1 20160412 (Linaro GCC 5.3-2016.05) ) #2 PREEMPT Mon May 6 21:55:25 EDT 2024

环境变量

再看环境变量,执行echo $PATH,把可执行文件复制到环境变量中执行,仍然不行

再看动态链接库

查找库

执行arm-linux-readelf -d (arm-linux-readelf是一个用于分析ARM架构ELF格式文件的命令行工具),得到ELF文件的动态链接信息等

Dynamic section at offset 0x2f08 contains 26 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libpthread.so.0] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x0000000c (INIT) 0x10be0

可以发现需要libpthread.so.0库和libc.so.6,在开发板端查看库,进入库文件所在目录cd /lib/(不同的板子库文件存放位置可能有所不同),对比发现这两个库都没有

交叉编译工具链

找到交叉编译工具链的位置,我在项目中使用的是set(CMAKE_C_COMPILER "arm-buildroot-linux-gnueabihf-gcc"),使用which命令查找,执行which arm-buildroot-linux-gnueabihf-gcc,进入交叉编译工具链的库文件文件夹,例如:我的是/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc,库文件(包括静态库 .a 和动态库 .so)通常存放在与编译器可执行文件同级的 lib 目录下,

最后找到了libc.so.6库,执行ls -l ,得到lrwxrwxrwx 1 book book 12 Oct 20 2022 libc.so.6 -> libc-2.23.so,把libc.so.6和libc-2.23.so复制到开发板中,再把动态连接器复制过去,即ld-2.23.s0(也可能是别的,要注意一下)

最后:得到 version `GLIBC_2.28' not found (required by ./xwProject_v3_202407_write),这下完蛋了,动态链接库行不通,只能使用静态链接的方式了,加上-static

静态链接

在CMake文件中添加set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static"),最后重新编译项目,上传到开发板中执行即正常

总结

由于在项目中没有指定静态链接(大多数情况下使用动态链接)(由于我在静态库动态库的应用经验欠缺)导致

现在还有个问题:version `GLIBC_2.28' not found (required by ./xwProject_v3_202407_write)还没解决

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值