NDK编译系列:手机终端运行可执行文件的方法

这篇具有很好参考价值的文章主要介绍了NDK编译系列:手机终端运行可执行文件的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言


该方式为PC上的NDK工具生成的可执行文件和库,利用adb导入到手机(未采用Andriod Studio生成带界面的apk文件),直接通过windows的命令窗在安卓原生linux环境上运行仿真。

利用前文博客总结梳理的方法,假设已经生成了可在手机终端运行的二进制文件和相关动态库,我们该如何在终端上跑起来呢?

总体流程


下面介绍相关手机终端运行可执行文件的流程。

手机硬仿流程:

  • 由NDK生成相关静态库(.a)/动态库(.so)
  • 用NDK链接动态库so,生成可执行exe
    • 若直接生成的exe,可跳过上一步
  • 用adb将exe文件和so库导入手机目录
    • 赋予相关可执行文件可执行的权限
    • 若有,则将相关输入序列或样本导入手机
      • adb push
      • adb pull
  • 手机上EXPORT下临时链接库,链接到so当前目录
    • 链接好所需要动态库
  • 运行可执行二进制文件,得到硬仿输出结果,如:./DEMO

实战举例

  • 动态库:libhello.so
  • 可执行文件:main
  • 主调接收入参:1/2, 1:打印hello,2:打印bye
# 推入终端指定目录
adb push libhello.so /data/local/tmp
adb push main /data/local/tmp

# 声明链接库路径,可选
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp

# 命令窗进入手机终端
adb shell
cd /data/local/tmp
chmod 777 main

# 运行main,以当前目录作为链接库路径,入参1
LD_LIBRARY_PATH=./ ./main 1

补充说明


声明相关动态库链接路径的方法

  • 统一导入当前文件目录的动态库(仅当前运行阶段临时有效)
    • 如:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/test
  • 导入单个动态库(临时有效)
    • 如:export LD_PRELOAD=/usr/lib/gcc/aarch64-linux-gnu/7.5.0/libasan.so
  • 在运行exe指令前,添加链接路径
    • 如:LD_LIBRARY_PATH=./lib ./DEMO [参数1] [参数2] ...

如果运行可执行文件时,报找不到相关so库文件等,则可能是因为未进行上面操作。

运行可执行文件,报无可执行权限问题文章来源地址https://www.toymoban.com/news/detail-576147.html

  • 首先,用chmod 777 filename,添加可读可写可运行的文件权限
  • 其次,若chmod 777无法加可执行权限,则考虑以下因素:
    • 注意adb shell推到sdcard路径中,没办法用chmod 777,来给文件添加可执行权限
    • 建议推到 mnt 或者 data 这种高权限目录下,才能加可执行权限

到了这里,关于NDK编译系列:手机终端运行可执行文件的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu下通过.sh文件同时启动多个程序系列2—启动多个终端分别运行不同指令或者程序

    项目上经常遇到需要到开多个终端分别启动不用程序,这里简单介绍一个方法,通过.sh文件,同时启动多个程序 这里创建的文件名为 test.sh chmod 777 test.sh ./test.sh gnome-terminal --tab --title=A.sh – bash -c “ cd /home/aha/Downloads/test1 ./run.sh run.log ;exec bash” 只需要修改加粗部分即可 例如

    2024年02月06日
    浏览(32)
  • 如何编译Android内可运行的arm/arm64架构的busybox可执行文件

    如何使用NDK编译Android内可以运行的busybox二进制文件呢?此篇做操作说明。 https://busybox.net/downloads/busybox-1.28.1.tar.bz2 在Linux服务器中解压下载的源码包: 可以将我得配置文件复制到你的目录里直接使用,要注意的是修改:CONFIG_CROSS_COMPILER_PREFIX 和 CONFIG_SYSROOT 为你的ndk路径,最

    2024年02月05日
    浏览(40)
  • 【错误记录】在 Android Studio 的 Terminal 终端执行 gradlew 报错 ( 无法将“gradlew”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称 )

    在 Android Studio 的 Terminal 终端执行 gradlew 报错 , 报错信息如下 : 在之前的 Terminal 中可以执行 gradlew 命令 ; 更新到最新版的 Android Studio Dolphin 2021.3.1 版本后 , 出现上述问题 ; 这里注意到 Windows 终端发生了改变 , 原来的中断是 Windows cmd 命令行中断 ; 最新的 Android Studio 中 , 使用的

    2024年02月12日
    浏览(29)
  • Android JNI系列详解之CMake和ndk-build编译工具介绍

    一、前提 CMake和ndk-build只是编译工具,本次主要介绍ndk-build和CMake的区别,下节课介绍他们的使用。 二、CMake工具介绍 CMake:cross platform make,是跨平台的编译工具 CMake是在AndroidStudio2.2之后引入(目前默认的NDK编译工具),使用时配合CMakeList.txt和gradle。 对C++的配置: 默认配置

    2024年02月12日
    浏览(18)
  • 使用mac终端编译运行c程序

    本文介绍如何利用mac自带文本编辑软件编写c代码,并在mac自带终端内用命令行编译运行c程序。 1.在mac上安装c编译环境 打开mac自带的 终端 在终端命令行里输入 xcode-select --install 命令然后回车。 如果未安装c编译环境,会自动弹出窗口引导安装; 如果已安装编译环境,终端窗

    2024年02月11日
    浏览(23)
  • 【Python】在代码中执行终端命令并获取输出和运行状态

      在Python编程过程中,我们可能会遇到需要在终端命令行执行某个命令并获取其输出的操作,我们首先想到可能就是C语言中的 system(\\\"pause\\\"); 语句,确实,python当中也有类似的命令,同时,为了满足进一步的需求,比如判断指令是否执行完毕或者是得到执行输出的内容。  

    2024年02月05日
    浏览(30)
  • NDK编译C++源码生成Android平台so文件(opencv_android)

     1.准备CPP文件  编写CMakeLists.txt 编写 mk文件   android-8 is unsupported. Using minimum supported version android-16  APP_PLATFORM android-16 is higher than android:minSdkVersion 1 in ./AndroidManifest.xml 修改Application.mk中的APP_PLATFORM为 android-21  builg.gradle添加原生编译路径     出现gnustl_static不支持错误  修改

    2024年02月10日
    浏览(22)
  • 运行Windows终端提示由于找不到mscoree.dll无法继续执行代码

    ​Windows终端可以说是Windows系统中非常重要的功能之一,可以帮助用户通过命令行的模式来调整电脑,但是最近不少用户在运行的时候却提示由于找不到mscoree.dll无法继续执行代码,下面小编就带着大家一起具体看看怎么解决这个问题吧! 更多重装系统教程参考小白系统网 操

    2024年02月04日
    浏览(24)
  • 【免root】旧安卓手机本地运行青龙面板[termux高级终端]

    前期准备 ​下载zerotermux和青龙恢复包并且安装zwerotermux 软件需要后台运行所以我们要打开设置,找到电池,点击后台耗电管理找到zerotermux然后允许软件后台高耗电(每部手机设置不同自己研究) 1.打开zerotermux输入termux-setup-storage获取文件读写权限回车   2.然后把下载好的青

    2024年02月16日
    浏览(97)
  • ros编译正常,生成可执行文件无法找到的解决方法Couldn‘t find executable named 。。

    最近初学ros,出现了ros编译正常,生成可执行文件正常,但是无法用rosrun命令执行的情况。  可以看出这里的编译是没有问题的  但是电脑找不到可执行文件,我在.bashrc文件里面已经source了 cmakelists.txt我也配置完了catkin_package,add_executable,target_link_libraries,声明的顺序也没有什

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包