百度知道网页版地址重庆公司seo
web/
2025/10/1 21:18:24/
文章来源:
百度知道网页版地址,重庆公司seo,建协的证书全国通用吗,怎样做网站导购2019-07-22关键字#xff1a;/system/bin/sh: xxx: No such file or directory虽然说 Android 也是基于 Linux 的#xff0c;但总归来说它们的编译链还是很有可能不一样的#xff0c;这就导致编译出来的程序有可能不能通用#xff0c;即使它们都是基于 Linux 的。而有些不能…2019-07-22关键字/system/bin/sh: xxx: No such file or directory虽然说 Android 也是基于 Linux 的但总归来说它们的编译链还是很有可能不一样的这就导致编译出来的程序有可能不能通用即使它们都是基于 Linux 的。而有些不能通用的根本原因在于程序运行时所依赖的环境不满足比如常见的就是一些库文件缺失了。笔者这边有个需求需要将一个第三方的原本目标运行环境是 Linux 嵌入式环境的可执行程序在 Android4.4 的环境上运行起来。刚一接到这个需求的时候我就一阵头大一想到编译链不同我就两脚发软。果然刚一想运行这一程序它就给报了一个这样的错误提示/system/bin/sh: ./system/home1/ctstor/ctserver: No such file or directory想都不带想的肯定是编译链不同导致运行环境不满足使得程序不能运行的。但问题还得解决啊总不能直接就和领导说编译链不同搞不了吧。怎么办呢看看它到底缺了些什么。用纯正 Linux 环境来看一下这个可执行程序的环境依赖信息。笔者这边是将程序放到 ubuntu 下去分析因为笔者的 Android4.4 上没有相关程序。通过以下命令查看这个可执行程序的编译依赖信息readelf -l xxx结果如下所示Elf file type is EXEC (Executable file)Entry point0xe6e0There are8 program headers, starting at offset 52Program Headers:Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg AlignEXIDX0x00be90 0x00013e90 0x00013e90 0x00008 0x00008 R 0x4PHDR0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4INTERP0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1[Requesting program interpreter:/lib/ld-linux.so.3]LOAD0x000000 0x00008000 0x00008000 0x0be9c 0x0be9c R E 0x8000LOAD0x00c000 0x0001c000 0x0001c000 0x0067c 0x006cc RW 0x8000DYNAMIC0x00c01c 0x0001c01c 0x0001c01c 0x00130 0x00130 RW 0x4NOTE0x000148 0x00008148 0x00008148 0x00020 0x00020 R 0x4GNU_STACK0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4Section to Segment mapping:Segment Sections...00.ARM.exidx0102.interp03 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.exidx .eh_frame04.init_array .fini_array .jcr .dynamic .got .data .bss05.dynamic06 .note.ABI-tag07可以看到上面红色加粗的部分表明程序的运行需要一个 “解释器” 。说白了就是要想加载这个程序运行环境中必须要有上面黄色加粗部分的库就是 /lib/ld-linux.so.3 库。那这是不是说只要我将这个库放到指定路径下它就可以加载了呢试一下就知道了。不过在这之前我们还有一个关键的步骤必须要知道这个可执行程序所使用的编译链。笔者这边有个文档记载了它的编译链为 arm-none-linux-gnueabi直接去网上下载这个编译链然后在里面找到 ld-linux.so.3 库再放进 Android 开发板中去就好了。这里要注意它要求的是根目录下的 lib 目录Android4.4 系统默认是不带 /lib 目录的。要自己创建。先开一下根目录的操作仅限mount -o remount r,w /当然这一步不见得都能执行成功如果执行不成功那就得您自个去找找原因了。然后再 mkdir /lib 并将 ld-linux.so.3 下载到这个目录下去。这里也有一个关键点不能修改创建出来的目录以及下载下去的文件的权限。否则的话在运行的时候是会报 permission denied 错误的。然后试一下这个程序果然不报前面那个 No such file or directory 的错误了。但是报了另外一个错误error while loading shared libraries: libqte.so.3: cannot open shared object file: No such file or directory还是 No such file or directory 错误只不过是另外一个 No such file or directory 错误。而且这个错误也很明显就是运行时的动态库缺失。这个时候得再回到前面 ubuntu 中去看看这个可执行程序在运行时期需要什么库依赖。readelf -d xxx然后可以看到下列结果Dynamic section at offset 0xc01c contains 33entries:Tag Type Name/Value0x00000001 (NEEDED) Shared library: [libqte.so.3]0x00000001 (NEEDED) Shared library: [libts-0.0.so.0]0x00000001 (NEEDED) Shared library: [librt.so.1]0x00000001 (NEEDED) Shared library: [libpthread.so.0]0x00000001 (NEEDED) Shared library: [libdl.so.2]0x00000001 (NEEDED) Shared library: [libstdc.so.6]0x00000001 (NEEDED) Shared library: [libm.so.6]0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]0x00000001 (NEEDED) Shared library: [libc.so.6]0x0000000f (RPATH) Library rpath: [/usr/qte338-target2/lib]0x0000000c (INIT) 0xd7780x0000000d (FINI) 0x1317c0x00000019 (INIT_ARRAY) 0x1c0000x0000001b (INIT_ARRAYSZ) 20(bytes)0x0000001a (FINI_ARRAY) 0x1c0140x0000001c (FINI_ARRAYSZ) 4(bytes)0x00000004 (HASH) 0x81680x00000005 (STRTAB) 0xa1840x00000006 (SYMTAB) 0x8b240x0000000a (STRSZ) 10293(bytes)0x0000000b (SYMENT) 16(bytes)0x00000015 (DEBUG) 0x00x00000003 (PLTGOT) 0x1c14c0x00000002 (PLTRELSZ) 2608(bytes)0x00000014(PLTREL) REL0x00000017 (JMPREL) 0xcd480x00000011 (REL) 0xcd080x00000012 (RELSZ) 64(bytes)0x00000013 (RELENT) 8(bytes)0x6ffffffe (VERNEED) 0xcc880x6fffffff (VERNEEDNUM) 40x6ffffff0 (VERSYM) 0xc9ba0x00000000 (NULL) 0x0然后就很清晰了将上面的几个标示为 NEEDED 的库文件全部拷贝到 /lib 目录下。这些库文件一般都可以在指定的编译链中找到如果有一些特殊的库不是直接包含在编译链中的那就得另想办法去寻找了。一般而言稍微负点责任的程序提供方都会将这些库一并给过来的。在弄好库文件以后再去运行就发现可以了。我们的原本目标运行环境是嵌入式 Linux 环境的可执行程序就在 Android 下跑起来了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85255.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!