[RK3568 Android12] Linux 解释器ld-linux-aarch64.so.1 && /system/bin/linker

博客介绍了在Android12设备上运行使用Linux解释器ld-linux-aarch64.so.1的二进制文件时遇到的问题。通过readelf命令查看二进制文件信息,发现其依赖于/system/bin/linker。当尝试运行文件时,系统使用/system/bin/sh导致失败。解决方案包括复制Linux的ld-linux-aarch64.so.1到Android系统并创建软链接,以及设置LD_LIBRARY_PATH以解决库找不到的问题。最后,成功运行aplay并总结了解决此类问题的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:readelf -l 查看二进制文件信息

1|rk3568_s:/odm/lib # readelf -l  /data/aplay

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

Program Headers:
  Type           Offset   VirtAddr           PhysAddr           FileSiz MemSiz  Flg Align
  PHDR           0x000040 0x0000000000400040 0x0000000000400040 0x001c0 0x001c0 R   0x8
  INTERP         0x000200 0x0000000000400200 0x0000000000400200 0x0001b 0x0001b R   0x1
      [Requesting program interpreter: /lib/ld-linux-aarch64.so.1]
  LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x0faf4 0x0faf4 R E 0x1000
### 解决 `aarch64-linux-gnu-ld cannot find -lrfdc` 错误的方法 在开发环境中,当遇到链接器错误提示 `cannot find -l<library>` 时,这意味着链接阶段未能定位到指定的库文件。对于 `-lrfdc` 的问题,以下是详细的分析与解决方案: --- #### 1. **确认库文件的存在** 首先需要检查系统中是否存在名为 `librfdc.so` 或其他形式(如 `librfdc.a`)的相关库文件。可以使用以下命令进行全局搜索: ```bash find / -name "librfdc*" 2>/dev/null ``` 如果未发现任何匹配的结果,则表明该库尚未安装或被正确部署。 --- #### 2. **安装必要的依赖包** 根据引用中的描述[^1]以及常见的嵌入式开发流程,在使用交叉编译工具链的情况下,可能需要额外下载并配置相应的 SDK 资源包。例如,针对 ARM 平台 (aarch64),可以从官方支持站点获取预构建好的二进制文件或将源码自行编译生成目标库。 具体操作步骤如下所示: - 下载适合版本号为 2017.4 的 SDK; - 将其解压后按照指引完成初始化过程; - 确认路径已添加至环境变量 `$PATH` 中以便后续调用方便快捷[^2]。 --- #### 3. **指定正确的库路径** 即便拥有正确的库文件,但如果它们位于非标准目录之外,默认情况下链接器不会自动扫描这些地方寻找依赖项。因此建议显式告知 GCC/G++ 工具链去哪里找寻所需的外部模块。有两种主要途径可供选择: ##### 方法一:临时增加参数传递给编译指令 可以在 Makefile 或直接运行 gnu 编译套件的时候附加选项指明额外搜寻范围。例如: ```bash g++ your_code.cpp -o output_program -L/custom/library/path -lrfdc ``` 其中 `-L` 参数后面紧跟的是存放动态/静态库的具体地址;而 `-l` 则表示要链接的目标名称去掉前缀(`lib`)和扩展名后的短名字部分[^3]。 ##### 方法二:持久化设置通过修改全局配置文件实现自动化管理 编辑 `/etc/ld.so.conf.d/user_defined_libs.conf` 添加新行记录新增加的第三方资源位置信息之后保存退出再执行刷新缓存动作让改动即时生效: ```bash echo "/custom/library/path" | sudo tee -a /etc/ld.so.conf.d/user_defined_libs.conf sudo ldconfig ``` --- #### 4. **检查交叉编译器的有效性** 从另一个角度出发考虑可能存在兼容性方面的问题&mdash;&mdash;即所使用的主机端编译器是否能够理解目标架构下的符号定义规则。正如提到过的那样,&ldquo;command not found”的现象往往暗示着 PATH 设置不当或者是根本就没有准备好完整的 cross-toolchain 组件集合[^4]。此时应当参照之前成功的项目经验重新审视整个工作流设计合理性,并确保每一步都严格遵循最佳实践指导原则来进行调整优化直至恢复正常运作状态为止。 --- ### 结论 综上所述,解决此类链接期找不到特定函数库的情况一般涉及以下几个关键环节的操作组合拳出击方能奏效:一是核实实体对象本身确实存在与否;二是合理规划导入机制从而便于识别关联要素之间的映射关系;三是审慎评估潜在冲突因素进而采取针对性措施消除隐患保障整体稳定性表现良好。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家有工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值