Android studio 使用opencl库(realme 手机)

这篇具有很好参考价值的文章主要介绍了Android studio 使用opencl库(realme 手机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

唉,尝试了很多天之后,经历各种各样报错,查找好几天,解决五分钟,终于可以在Android Studio上使用opencl!!!!

一、查看自己手机支不支持opencl,下载opencl-z软件

链接:https://pan.baidu.com/s/16irhsWaBLGXjy96zPCa7MQ

提取码:1233

二、开始操作

       一、先下载platform-tools,这样子就可以使用adb命令了。

Android studio 使用opencl库(realme 手机)

       二、adb shell 命令进入手机(手机已经连接,并且处于usb调试模式)

Android studio 使用opencl库(realme 手机)

       三、进入 cd /system/vendor/lib 看看有没有 libopencl.lib

Android studio 使用opencl库(realme 手机)

       四、把opencl.so文件拉到电脑来(随意一个地方),放到指定目录(android studio)

adb pull /system/vendor/lib/libOpenCL.so d:/opencl

Android studio 使用opencl库(realme 手机)

Android studio 使用opencl库(realme 手机)

        五、编译,运行

                1.cmakelist.txt添加库文件

add_library(

        OpenCL

        SHARED

        IMPORTED)

set_target_properties(OpenCL PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jinLibs/${ANDROID_ABI}/libOpenCL.so)



target_link_libraries(

        myopencldemo

        OpenCL

        ${log-lib})

                2.app下的build.gradle添加内容

externalNativeBuild {

   cmake {

        abiFilters 'arm64-v8a'

    }

}

ndk{

     abiFilters 'arm64-v8a' // 指定编译

 }

不指定编译的话,貌似会出现错误error adding symbols: File in wrong format clang++.exe: error: linker command failed with exit code 1

                3. 在native-lib.cpp中使用OpenCL

//添加头文件

#include <android/log.h>

#include <android/native_window_jni.h>

#include <CL/cl.h>

#include <CL/cl_platform.h>

#define LOGD(...) __android_log_print(ANDROID_LOG_INFO,"David",__VA_ARGS__)

 //添加代码

    cl_platform_id *platforms;//查询后获得的平台列表,存放所有平台的ID

    cl_uint num_platforms;//当前可查询的平台的数量



    jint buffer;//创建一个buffer用以缓存平台数量,并传递;

    clGetPlatformIDs(0, NULL, &num_platforms);

    //当第二个参数为NULL时,函数将会查询当前可用平台的数量,并保存在第三个参数;

    platforms = new cl_platform_id[num_platforms];//查询后获得的平台列表,存放所有平台的ID

    clGetPlatformIDs(num_platforms ,platforms ,NULL);

    //获取平台数量后可以查询平台,将查询到的平台ID保存在第二个列表参数中

    buffer = num_platforms;

    LOGD("平台数:%d\n",buffer);

    LOGD("平台ID:%d\n",platforms);

LOGD("=============================================\n");

               4.那肯定是错误了。。。。,缺少库文件

Android studio 使用opencl库(realme 手机)

          引入,又发现再缺少库文件。。。。

               所以说,还是看下缺少啥文件把。。。。。linux系统下,objdump命令查看

objdump -x libOpenCL.so | grep NEEDED

Android studio 使用opencl库(realme 手机)

终于找全了,开心,应该这次稳了!!!!!

Android studio 使用opencl库(realme 手机)(根据手机不同,可能需要库会不一样)

        六、错误排查

       1、Fatal signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xc5614e64 in tid 22126

       一个错误,一杯水,半天过去。这个问题据说是是因为这几种情况。

第一空指针问题;第二函数有返回值,但是结束了没有返回。

但,我没有解决,也没有这问题,那么简单的程序,是不是。。。

        2、一顿操作,看logcat(terminal窗口 adb logcat | findstr “程序名”),发现有这几个问题。

Access denied finding property "ro.odm.prev.product.name"

/Zygote: Unable to open libbeluga.so: dlopen failed: library "libbeluga.so"

以为是权限问题,开始给手机刷root权限,又是一晚上过去,好在解决了,刷成功,不懂,可看

Realme x 刷有root权限_czhunian的博客-CSDN博客

        3、刷完之后,觉得又行了,一编译运行,好吧,又出现问题。。。。

       UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Unwind_Resume"

  找到一个命令readelf -sW libnative-lib.so| grep _Unwind
  The UND in the Ndx column means Undefined symbol
  参考链接:https://github.com/google/oboe/issues/966        然后呢???又是半天过去,唉

        七、最后放弃,那是不可能的,重新新建一个项目,从头开始

新问题来了:A/libc: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xe1f7fb

虽然跟上面第一个问题不是很像,但是找了一圈,好像导致原因都是一样,就是空指针异常,没有返回值啥的,又是没有解决的问题。。。,但是又学到一个新知识

addr2line -f -e libnative-lib.so 0xe1f7fb90,查看到底是哪个函数出现!!!

-e 输出错误代码行数和文件路径 -f 输出函数名

addr2line在ndk下

       Android studio 使用opencl库(realme 手机)

 但是问题又来了,输出是 ???,好吧,绝望了。。。

搜起来,找到一个不错的解决方案,可以看看

addr2line 输出为?:0可能原因_qq_23101811的博客-CSDN博客_add2line显示???

但是死活搞不定,太菜了。。。。

说是要编译成debug的,cmakelist.txt 添加命令,add_definitions("-Wall -g")

但是还是不行,所以说摆烂了,不搞了,累了。。。

        八、又来了,重新新建项目,换个手机

               发现,运行成功了,wc,喜大普奔,一看平台数0,md,为什么。。。。

        1.先看看为什么之前的不行,现在的项目编译运行,直接通过了,一对比,发现

          Android studio 使用opencl库(realme 手机)

 这边不能引入动态库,咦,为什么啊,明明动态库要加载进行,不然怎么找得到!wc,后面想一想可能是因为手机有默认的执行环境,她自己去里面找了找了,之前的用了自己加载的反而会出错。

        2.一看,clGetPlatformIDs函数 返回CL_INVALID_VALUE(-30)

开始各种操作了,报错是 参数不合法,可是简单啊,咋那么可能不合法。。。

郁闷一晚上

        3.算是长征结束了,真的喜大普奔!!!!

换个操作搜,问Android studio 使用opencl,发现了问题,唉

在Android Studio上使用OpenCL_gaussrieman123的博客-CSDN博客_opencl 安卓

说是,因为google是不公开支持opencl的,所以NDK中并不会有libOpenCL.so,这个库都是放在各个厂家的库中,比较常见的位置是"system/vendor/lib/libOpenCL.so",把所需的动态库全部pull出来,看成app的私有库来加载,可以解决编译的问题,但是在使用clGetPlatforms时,会找不到可用的platform;使用stub,将libOpenCL.so动态加载,libopencl.c完成适配平台和封装接口的工作,主要用到dlopendlsym,前者用来加载vendor支持的CL动态库,后者用来映射接口;这边直接将stub编译成一个静态库使用即可。

历时快一周的简单的opencldemo,终于可以运行成功。算是对得起这几天了,唉。

代码:GitHub - czhunian/opencldemo at master文章来源地址https://www.toymoban.com/news/detail-492075.html

到了这里,关于Android studio 使用opencl库(realme 手机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 在基于 Android 相机预览的 CV 应用程序中使用 OpenCL

    组装和配置 Android OpenCL SDK。 示例的 JNI 部分依赖于标准 Khornos OpenCL 标头,以及 OpenCL 和 libOpenCL.so 的C++包装器。标准 OpenCL 标头可以从 OpenCV 存储库中的第三方目录或 Linux 发行版包中复制。C++包装器在Github上的官方Khronos存储库中可用。按以下方式将头文件复制到专用目录:

    2024年01月21日
    浏览(39)
  • 使用Android studio,安卓手机编译安装yolov8部署ncnn,频繁出现编译错误

    从编译开始就开始出现错误,解决步骤: 1.降低graddle版本,7.2-bin  ---   降低为 6.1.1-all 2.仍旧有报错,jdk从17降为 jdk 13, 在setting配置里, 进入build,excution,deployment文件夹中,(是一个文件夹,名字长,不是三个) 进入build tools,再进入 Gradle,  如图所示, 勾选,选择

    2024年04月28日
    浏览(40)
  • 使用Android Studio 利用极光推送SDK 制作手机 APP 实现远程测试技术 (第一部)

    总参考文章:https://blog.csdn.net/qq_38436214/article/details/105073213 Android Studio 安装配置教程 - Windows(详细版) 1.JDK 安装与环境变量配置(Win10详细版) 《jdk-8u371-windows-i586.exe》 https://blog.csdn.net/qq_38436214/article/details/105071088 此时会让登录账号密码: https://login.oracle.com/mysso/signon.jsp 账号:

    2024年02月03日
    浏览(33)
  • Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)

    运行有问题或需要源码请点赞关注收藏后评论区留言 在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。 首先要给

    2024年02月09日
    浏览(51)
  • realme GT neo5 手机关闭系统更新

    realme 手机总是自动系统更新,就很烦,而且今天早上我在付钱的时候,直接就自动关机,更新系统了,让我在那傻等着,我服了 当场我就气晕了 如果要更新,我直接更新到后面几个版本就好 不用过两天就更新一次,很傻 先进去手机更多设置——版本信息——重复多次点击

    2024年02月08日
    浏览(113)
  • 【评测】真我Realme GT Neo5手机性能评测

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 购买记录 鲁大师评测 安兔兔评测 个人使用感受 优点 几个明显的体验感不好的点 大图、多图预警! 配置说明: 运行内存:12GB 存储容量:256GB 充电功率:150W 评测软件: 鲁大师 安兔兔                         买

    2024年02月09日
    浏览(42)
  • android studio 连接安卓手机/鸿蒙手机教程

    一、配置SDK 1.点击SDK Manager ​编辑 2.选择SDK平台与SDK工具 1.SDK平台: 2.SDK工具: 二、连接手机 1.开发者模式 2.连接数据线 三、运行android studio 1.SDK平台: 安卓手机 选择手机的安卓版本, 鸿蒙手机选择10.0即可 2.SDK工具: 第一步:点击 Google USB Driver 第二步:点击 OK 如果电脑

    2024年02月05日
    浏览(51)
  • Android Studio连接手机教程

    1.安装Google USB Driver step1:在Android Studio主界面中,点击SDK Manager,进入Android SDK管理界面 step2:在Android SDK界面下,选择SDK Tools,然后勾选Google USB Driver,再点击OK step3:点击OK step4:点击Finish [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyfTzQ9Y-

    2023年04月12日
    浏览(25)
  • Android Studio连接安卓手机

    点击右上角红框的【SDK Manager】-【SDK Tools】。 也可以在 【tools】-【SDK Manager】-【SDK Tools】下进入。 点击Google USB Driver,下载后点ok。 右键【我的电脑】-【高级系统设置】-【环境变量】,新建变量【Android_Home】; 值为:C:UsersHuoAppDataLocalAndroidSdk;C:UsersHuoAppDataLocalAnd

    2024年02月16日
    浏览(29)
  • Android studio 设置安卓手机

    参考这个链接 ghttps://developer.android.com/studio/debug/dev-options 列出常用手机的设置,但是我的手机不在此列 Google Pixel Settings    About phone    Build number Samsung Galaxy S8 and later Settings    About phone    Software information    Build number LG G6 and later Settings    About phone    Software info    Bui

    2024年02月13日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包