【Linux学习笔记】安卓运行C可执行文件No such file or directory

文章目录

  • 开发环境
  • 运行失败现象
  • 解决办法
    • 方法一:使用静态库
    • 方法二:使用动态库
      • 创建lib
      • 查找依赖库
      • 复制需要注意的事情


开发环境

  • 开发板:正点原子RK3568开发板
  • 安卓版本:11
  • 可执行程序命名:ledApp
  • 需加载模块:dtsled.ko

其实就是正点原子的设备树开发第一个例程

运行失败现象

在这里插入图片描述
加载完模块后运行可执行程序出现 No such file or directory

1|console:/data/local/tmp/Demo # ./ledApp /dev/led 1
/system/bin/sh: ./ledApp: No such file or directory

解决办法

方法一:使用静态库

一般为了驱动测试编写的测试app用这个方法即可,虽然编译完体积大了点,但是方便
在编译可执行程序时在之后加上 -static 即可

/opt/atk-dlrk356x-toolchain/bin/aarch64-buildroot-linux-gnu-gcc ledApp.c -o ledApp -static

方法二:使用动态库

如果不是为了测试,更改比较频繁,用这种会更好

编译可执行程序时使用:

/opt/atk-dlrk356x-toolchain/bin/aarch64-buildroot-linux-gnu-gcc ledApp.c -o ledApp

方法就是:把Linux C的动态连接库给复制到安卓的 /lib 目录下。

创建lib

没有这个目录的,手动创建一个。有就跳过这一步

//手动创建lib需要先开一下根目录的操作权限
mount -o remount r,w /
mkdir /lib

查找依赖库

readelf -l ledApp      //检查一下加载这个执行文件需要的库
are 9 program headers, starting at offset 64......0x000000000000001b 0x000000000000001b  R      0x1[Requesting program interpreter: /lib/ld-linux-aarch64.so.1]
......08     .init_array .fini_array .dynamic .got 

看到 [Requesting program interpreter: /lib/ld-linux-aarch64.so.1]这句话表明程序的运行需要一个 “解释器” 。也就是说想要加载这个程序就必须包含ld-linux-aarch64.so.1库。
将ld-linux-aarch64.so.1这个库放到/lib中去。

readelf -d ledApp   //查一下运行时需要什么支持库
Dynamic section at offset 0xdf8 contains 25 entries:标记        类型                         名称/0x0000000000000001 (NEEDED)             共享库:[libc.so.6]0x000000000000000c (INIT)               0x400568......0x000000006ffffff0 (VERSYM)             0x4004320x0000000000000000 (NULL)               0x0

把后面标有NEEDED 的库全都搬到安卓的/lib中,再次运行即可。

复制需要注意的事情

因为Linux C的动态链接库中包含了很多链接,所以不能直接复制,需要先压缩再复制到安卓中再解压,保证链接也被一起复制。
压缩使用:.tar.bz2格式

至于其他原因出现No such file or directory这样的问题,暂时还没发现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616795.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层

大家好,今天给大家介绍阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 嵌入式系统是一种能…

3D Gaussian Splatting for Real-Time Radiance Field Rendering 在AutoDl上部署

目录 一. 租用AutoDl服务器二. Xtfp与服务器链接三. 本地训练准备数据3.1准备数据3.2 代码和模块下载 四. autodl环境配置4.1准备4.2 配置4.3 训练 五. 总结Reference 一. 租用AutoDl服务器 1.1 进入官网进行注册 1.2 点击算力市场租服务器,(下图4090是…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务:task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程 大家好我是艾西,一个做服务器租用的网络架构师也是游戏热爱者。最近在steam发现rust腐蚀自建的服务器以及玩家还是非常多的,那么作为服务器供应商对这商机肯定是不会放过的哈哈哈! 艾西这…

Quantum Temple借助Sui通过NFT推动再生旅游

从金融到艺术,从游戏到无线网络,各行各业都涌现出大量初创公司,利用区块链技术颠覆现状。说到旅游业,让人联想到拥挤的机场、快节奏的旅游和豪华游轮,可能看起来对区块链创新持守旧态度。一家初创公司认为现在是时候改…

Redis入门到通关之String命令

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Stri…

LinuxAndroid: 旋转编码器input输入事件适配(旋转输入)

rk3588s: 旋转编码器input输入事件适配 基于Android 12 kernel-5.10版本 参考文档: https://blog.csdn.net/szembed/article/details/131551950 Linux 输入设备调试详解(零基础开发)Rotary_Encoder旋转编码器驱动 通用GPIO为例 挂载input输…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证,但是由于物理量子比特的大规模制备以及噪声的影响,还没有办法再大规模的场景下应用。 这时候就需要我们思考,如何通过软件的方法怎么样把大的问题分解成小的问题,以便通过现在…

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署 模型介绍 BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果,对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…

MySQL-触发器:触发器概述、触发器的创建、查看删除触发器、 触发器的优缺点

触发器 触发器1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 注:此为笔者学习尚硅谷-宋红康MySQL的笔记,其中包含个人的笔记和理解&#…

亚远景科技-ASPICE 4.0-HWE硬件过程的范围 The Technical Scope of HW process

ASPICE 4.0中的HWE process是电气和电子硬件的技术范畴,涵盖了硬件工程中的需求分析、设计和验证活动,但不包括以下活动: 1. 系统级工程过程。既不包括机电一体MECHATRONIC,也不包括ECU特定电子控制单元的开发。 2. 硬件采购过程…

php:实现压缩文件上传、解压、文件更名、压缩包删除功能

效果图 1.上传文件 2.压缩包文件 3.itemno1文件 4.上传到系统路径\ItemNo 5.更名后的itemno1文件(命名&#xff1a;当天日期六位随机数) 代码 <form action"<?php echo htmlspecialchars($_SERVER[PHP_SELF], ENT_QUOTES, UTF-8); ?>" method"post…