我正在尝试在运行Android 7.0的三星上运行/system/vendor/lib/libOpenCL.so,我收到一个我之前没有遇到的错误:
E / linker:库“/system/vendor/lib/libOpenCL.so”(“/ system/vendor/lib/libOpenCL.so”)需要或由“/data/app/.../lib/arm64/libCLProcessor” .so“无法访问命名空间:[name =”classloader-namespace“,ld_library_paths =”“,default_library_paths =”...“])
它适用于另一个Android 7.0设备(Motorola G4),libOpenCL.so位于同一目录中。
任何人都知道它为什么在一台设备上工作而不在另一台设备上?
我正在使用https://github.com/krrishnarraj/libopencl-stub/blob/master/src/libopencl.c中的代码来实现/使用cl函数,而我的cl内核在实际打开open cl库的设备上运行得很好。
问题似乎是Inforce构建问题,因为/libOpenCL.so没有填充到/system/etc/public.libraries.txt
中。
通过编辑文件(添加了libOpenCL.so
),我能够在Inforce开发板上解决同样的问题。
Android限制私有库访问,App开发人员无法访问库。 Google Document
如果你是应用程序开发人员(我的意思是无法访问系统文件)。只有两个解决方案:
在这种情况下,OpenCL,将库复制到您的应用程序,或使用其他API