ubuntu 运行可执行文件报错--No such file or directory

原因大概有以下几种:

  • 文件本身不存在或者文件损坏
  • 无执行权限 (chmod 777 xxx)
  • 系统位数与程序位数不同
  • 解释器不匹配或者找不到
  1.  针对原因三的解决方法可以参见:https://stackoverflow.com/questions/3949161/no-such-file-or-directory-but-it-exists
uname -a   //查看编译平台的编译器位数
root@idriver:~/soft/Workspace# uname -a
Linux idriver 5.4.0-65-generic #73~18.04.1-Ubuntu SMP Tue Jan 19 09:02:24 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
file  ./1910_demo  //查看可执行文件的位数
root@idriver:~/soft/Workspace/pcie_trans/1910_demo/build# file 1910_demo
1910_demo: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

发现位数匹配,不是原因三。
 2. 针对原因四
    查看elf信息:

readelf -l ./1620_demo 
root@mdchost:/home/mdc/pcie_trans/1620_demo/build# readelf -l ./1620_demo 

Elf file type is EXEC (Executable file)
Entry point 0x400bb0
There are 9 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                 0x00000000000001f8 0x00000000000001f8  R      8
  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
                 0x000000000000001d 0x000000000000001d  R      1
      [Requesting program interpreter: /lib64/ld-linux-aarch64.so.1]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x00000000000013ac 0x00000000000013ac  R E    10000
  LOAD           0x0000000000001d50 0x0000000000411d50 0x0000000000411d50
                 0x0000000000000338 0x0000000001000348  RW     10000
  DYNAMIC        0x0000000000001d68 0x0000000000411d68 0x0000000000411d68
                 0x0000000000000260 0x0000000000000260  RW     8
  NOTE           0x0000000000000258 0x0000000000400258 0x0000000000400258
                 0x0000000000000020 0x0000000000000020  R      4
  GNU_EH_FRAME   0x00000000000012ac 0x00000000004012ac 0x00000000004012ac
                 0x0000000000000034 0x0000000000000034  R      4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     10
  GNU_RELRO      0x0000000000001d50 0x0000000000411d50 0x0000000000411d50
                 0x00000000000002b0 0x00000000000002b0  R      1

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .note.ABI-tag .hash .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
   03     .init_array .fini_array .dynamic .got .got.plt .data .bss 
   04     .dynamic 
   05     .note.ABI-tag 
   06     .eh_frame_hdr 
   07     
   08     .init_array .fini_array .dynamic .got 

发现解释器为: Requesting program interpreter: /lib64/ld-linux-aarch64.so.1

而平台解释器的路径为:/lib/ld-linux-aarch64.so.1

 在运行平台上发现解释器的路径不对,然后修改了平台解释器路劲即可。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值