打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
可执行文件找不到的解决方法
这里以我系统上的一个打印"hello world!"的程序为例,这个是arm平台的,我X86机器上是无法执行的。
执行shell命令:
    “readelf -l hello-static”   #这个是静态编译的,编译时使用了-static选项
命令输出:
C/C++ code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Elf file type is EXEC (Executable file)
Entry point 0x8b28
There are 6 program headers, starting at offset 52
 
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x077610 0x0007f610 0x0007f610 0x00768 0x00768 R   0x4
  LOAD           0x000000 0x00008000 0x00008000 0x77d7c 0x77d7c R E 0x8000
  LOAD           0x077d7c 0x00087d7c 0x00087d7c 0x00c58 0x020dc RW  0x8000
  NOTE           0x0000f4 0x000080f4 0x000080f4 0x00020 0x00020 R   0x4
  TLS            0x077d7c 0x00087d7c 0x00087d7c 0x00010 0x00028 R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
 
 Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx 
   01     .note.ABI-tag .init .text __libc_freeres_fn __libc_thread_freeres_fn .fini .rodata __libc_subfreeres __libc_atexit __libc_thread_subfreeres .ARM.extab .ARM.exidx .eh_frame 
   02     .tdata .init_array .fini_array .jcr .data.rel.ro .got .data .bss __libc_freeres_ptrs 
   03     .note.ABI-tag 
   04     .tdata .tbss 
   05     


执行shell命令:
    “readelf -l hello-dynamic”  #这个是动态编译的
命令输出:
C/C++ code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Elf file type is EXEC (Executable file)
Entry point 0x82c4
There are 8 program headers, starting at offset 52
 
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x00049c 0x0000849c 0x0000849c 0x00008 0x00008 R   0x4
  PHDR           0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4
  INTERP         0x000134 0x00008134 0x00008134 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.3]
  LOAD           0x000000 0x00008000 0x00008000 0x004a8 0x004a8 R E 0x8000
  LOAD           0x0004a8 0x000104a8 0x000104a8 0x0011c 0x00120 RW  0x8000
  DYNAMIC        0x0004b4 0x000104b4 0x000104b4 0x000e8 0x000e8 RW  0x4
  NOTE           0x000148 0x00008148 0x00008148 0x00020 0x00020 R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
 
 Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx 
   01     
   02     .interp 
   03     .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.exidx .eh_frame 
   04     .init_array .fini_array .jcr .dynamic .got .data .bss 
   05     .dynamic 
   06     .note.ABI-tag 
   07     


看出两者的区别了么! 动态编译的程序有INTERP段,它指明了程序在加载过程中需要使用的动态链接加载器,如果指定的这个加载器未找到,那么就会提示“ No such file or directory”,如果,找到动态链接加载器,但未找到需要的库,那会有另外的提示。

关于你问题的解决操作:
使用readelf,关注“[Requesting program interpreter: /lib/ld-linux.so.3]”字段。检查目标机里该路径里有没有对应的加载器!
如果没有,你可以使用ln创建一个符号链接以指向你目标机里的动态链接加载器!目测你系统是android,这个我没玩过……

因为你的系统是androd, 它所使用的c库是bxx什么来着忘记了。如果你编译lcd这个程序的时候使用的编译器不是以bxx为内建c库的话,可能还是无法正常运行(感觉,未测试)……

最后,希望能帮到你……
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何在CoIDE中使用C++
The thorny path of Hello World
Beginner's Guide to Linkers
Linux段管理,BSS段,data段,.rodata段,text段
linux编程之main()函数启动过程
一道内存分配的面试题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服