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

news2024/11/24 11:14:21

文章目录

  • 开发环境
  • 运行失败现象
  • 解决办法
    • 方法一:使用静态库
    • 方法二:使用动态库
      • 创建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)             0x400432
 0x0000000000000000 (NULL)               0x0

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

复制需要注意的事情

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm命令卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动

1.现象 执行npm install命令时,没有报错,卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动 2.解决办法 (1)更换淘宝镜像源 原淘宝 npm 域名http://npm.taobao.org 和 http://registry.npm.ta…

Day 39:动态规划 LeedCode 62.不同路径 63. 不同路径 II

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&#…

C语言:约瑟夫环问题详解

前言 哈喽,宝子们!本期为大家带来一道C语言循环链表的经典算法题(约瑟夫环)。 目录 1.什么是约瑟夫环2.解决方案思路3.创建链表头结点4.创建循环链表5.删除链表6.完整代码实现 1.什么是约瑟夫环 据说著名历史学家Josephus有过以下…

Ribbon-负载均衡原理解析(案例)

简介:负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…

MATLAB数据类型和运算符+矩阵创建

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍一、MATLAB数据类型和运算符💎1 MATLAB的数据类型🌹…

QT常用控件

常用控件 控件概述QWidget 核⼼属性核⼼属性概览enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 按钮类控件Push ButtonRadio ButtionCheck Box 显⽰类控件LabelLCD NumberProgressBarCalendar Widget 输⼊类控件Line EditText Edi…

[尚硅谷 flink] 状态管理 笔记

文章目录 10.1 状态概述10.2 状态分类1)托管状态(Managed State)和原始状态(Raw State)2)算子状态(Operator State)和按键分区状态(Keyed State) 10.3 按键分…

【OTA】STM32-OTA升级——持续更新

【OTA】STM32-OTA升级——持续更新 文章目录 前言一、ymodem串口协议1、Ymodem 协议2、PC3、蓝牙4、WIFI云平台 二、UDS车载协议1.UDS协议 总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、ymodem串口协议 1、Ymodem 协议 STM32 Ymodem …

React 组件生命周期对比:Class vs. 函数式

在 React 中,Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比,详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点,以及如…

10个Python接私活平台,打破职场信息闭塞,告别死工资!

前言 Python是一种简单易学、高效强大的编程语言,正变成越来越多人选择的热门技能。不论你是否有编程基础,在学习Python的道路上,坚持每天投入2小时,你将看到巨大的回报。 学习Python不仅可以为你提供更多就业机会,还…

微信小程序 uniapp+vue.js医疗在线问诊挂号系统4oy17

预约挂号系统的逐渐发展,进一步方便了广大用户,使其可以更方便、快捷地预约挂号,并且也有效地防止号贩子“倒号”,使用户预约挂号更公平,然而现有预约挂号系统或多或少有所欠缺 小程序前端框架:uniapp 小程…

【问题解决】ubuntu安装新版vscode报code-insiders相关错误

问题 目前 vscode官网 最新的包为 insiders_1.89.0-1712297812_amd64.deb ,双击或者使用sudo dpkg -i code-insiders_1.89.0-1712297812_amd64.deb安装后报错,执行其他命令也报错。 安装环境:ubuntu18.04 dpkg: 处理软件包 code-insiders (…

现在租一个服务器多少一个月啊?

现在租一个服务器多少一个月?优惠价格低至3.8元1个月,租用一个月云服务器收费价格表:阿里云和腾讯云2核2G3M服务器优惠价格61元一年,折合一个月5元,京东云轻量云主机5.8元一个月,华为云服务器优惠价格3.8元…

同态加密:重塑数据隐私与安全的未来

同态加密技术是当今信息安全领域的一个重要研究方向,它允许在加密数据上直接进行计算,而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中,我们将深入探讨同态加密的基本概念、技术特点、应用场景以…

每日一题---OJ题: 返回倒数第 k 个节点

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---返回倒数第k个结点,准备好了吗? 我们开始咯! 比如: 总共有5个结点,分别为 1->2->3->4->5 , 找倒数第一个结点,也就是"5" 题目很容易理解,我们先提供第一种思路 思路一: 假设链表长度为 n ,…

大数据实训进行时:数据标注项目

数据标注项目 培训目的 让同学们先熟悉理论知识,如:识别障碍物是否满足拉框的要求,如何进行拉框;熟悉标注操作,培养出能够进入正式项目的人员 培训地点 理论:学术报告厅、阶梯教室 实操:1实…

LeetCode-32. 最长有效括号【栈 字符串 动态规划】

LeetCode-32. 最长有效括号【栈 字符串 动态规划】 题目描述:解题思路一:辅助栈解题思路二:动态规划解题思路三:0 题目描述: 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且…

Redis的RDB文件

Redis持久化 Redis是操作内存的,所以是内存数据库,断电即失,所以需要持久化 RDB 文件名:dump.rdb # The filename where to dump the DB dbfilename dump.rdb在指定时间间隔内,将内存中的数据,集体快照写入磁盘内&…

linux如何使 CPU使用率保持在指定百分比?

目录 方法1:(固定在100%) 方法2:(可以指定0~100%) 方法3:使用ChaosBlade工具(0~100%) 方法1:(固定在100%) for i in seq 1 $(cat /pro…

Leetcode算法训练日记 | day25

一、组合总和Ⅲ 1.题目 Leetcode:第 216 题 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…