| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android studio 使用opencl库(realme 手机) -> 正文阅读 |
|
[移动开发]Android studio 使用opencl库(realme 手机) |
唉,尝试了很多天之后,经历各种各样报错,查找好几天,解决五分钟,终于可以在Android Studio上使用opencl!!!! 一、查看自己手机支不支持opencl,下载opencl-z软件链接:https://pan.baidu.com/s/16irhsWaBLGXjy96zPCa7MQ 提取码:1233 二、开始操作?????? 一、先下载platform-tools,这样子就可以使用adb命令了。?????? 二、adb shell 命令进入手机(手机已经连接,并且处于usb调试模式)?????? 三、进入 cd /system/vendor/lib 看看有没有 libopencl.lib?????? 四、把opencl.so文件拉到电脑来(随意一个地方),放到指定目录(android studio)
????????五、编译,运行????????????????1.cmakelist.txt添加库文件
????????????????2.app下的build.gradle添加内容
不指定编译的话,貌似会出现错误error adding symbols: File in wrong format clang++.exe: error: linker command failed with exit code 1 ????????????????3. 在native-lib.cpp中使用OpenCL
?????? ????????4.那肯定是错误了。。。。,缺少库文件????????? 引入,又发现再缺少库文件。。。。 ?????? ????????所以说,还是看下缺少啥文件把。。。。。linux系统下,objdump命令查看
终于找全了,开心,应该这次稳了!!!!!
????????六、错误排查?????? 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"
??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下 ? ? ? ? ?但是问题又来了,输出是 ???,好吧,绝望了。。。 搜起来,找到一个不错的解决方案,可以看看 addr2line 输出为?:0可能原因_qq_23101811的博客-CSDN博客_add2line显示??? 但是死活搞不定,太菜了。。。。 说是要编译成debug的,cmakelist.txt 添加命令,add_definitions("-Wall -g") 但是还是不行,所以说摆烂了,不搞了,累了。。。 ????????八、又来了,重新新建项目,换个手机?????? ????????发现,运行成功了,wc,喜大普奔,一看平台数0,md,为什么。。。。 ????????1.先看看为什么之前的不行,现在的项目编译运行,直接通过了,一对比,发现? ? ? ? ?? ?这边不能引入动态库,咦,为什么啊,明明动态库要加载进行,不然怎么找得到!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完成适配平台和封装接口的工作,主要用到dlopen和dlsym,前者用来加载vendor支持的CL动态库,后者用来映射接口;这边直接将stub编译成一个静态库使用即可。 历时快一周的简单的opencldemo,终于可以运行成功。算是对得起这几天了,唉。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/28 23:32:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |