OpenCL dlopen问题

时间:2018-01-25 22:42:08

标签: android opencl dlopen

我正在尝试在运行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库的设备上运行良好。

4 个答案:

答案 0 :(得分:0)

该问题似乎是Inforce构建问题,因为/libOpenCL.so未填充到/system/etc/public.libraries.txt中。

我能够通过编辑文件(添加了libOpenCL.so)来解决Inforce开发板上的相同问题。

答案 1 :(得分:0)

Android限制了私有库的访问,App开发人员无法访问该库。 Google Document

如果您是应用程序开发人员(我是说无法访问系统文件)。只需两种解决方法:

  1. 使用公共NDK API
  2. 包括它们自己的那些库副本。

在这种情况下,使用OpenCL,将库复制到您的应用中,或使用其他API

答案 2 :(得分:0)

检查libOpenCL.so中是否存在/system/etc/public.libraries.txt

如果没有,请在上面的文件中添加libOpenCL.so,然后重新启动设备以使更改生效。

答案 3 :(得分:0)

在较新的android版本上,对我而言,解决方法是将 libOpenCL.so 添加到:

/system/etc/public.libraries.txt

请参见this SO post以供参考

注意: 正如其他人建议的那样,将其添加到{{1}}会阻止设备启动