2017-02-21 307 views
0

我想重复使用Android Eclipse项目来使用OpenCL库。 我曾经为我之前的手机设置了我的eclipse项目三星阿尔法。 现在我得到一个moto Z,我想修改这个项目来重用它。在Android项目中集成LibOpenCL

我从我的手机得到libOpenCL.so文件,我伸出改变我的项目中的文件,但编辑给我的错误:

[x86_64] SharedLibrary : libJNIProcessor.so 
/home/xxxx/NVPACK/android-sdk-linux/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin/ld: error: jni/libs/libOpenCL.so: incompatible target 
jni/include/CL/cl.hpp:1090: error: undefined reference to 'clReleaseContext' 
jni/include/CL/cl.hpp:1099: error: undefined reference to 'clReleaseCommandQueue' 
jni/include/CL/cl.hpp:1135: error: undefined reference to 'clReleaseKernel' 
jni/processor.cpp:143: error: undefined reference to 'clRetainProgram' 
jni/processor.cpp:145: error: undefined reference to 'clGetProgramInfo' 
jni/processor.cpp:147: error: undefined reference to 'clGetProgramBuildInfo' 
jni/processor.cpp:152: error: undefined reference to 'clGetProgramBuildInfo' 
jni/processor.cpp:156: error: undefined reference to 'clGetProgramBuildInfo' 
jni/processor.cpp:159: error: undefined reference to 'clReleaseProgram' 
jni/include/CL/cl.hpp:2878: error: undefined reference to 'clEnqueueWriteBuffer' 
jni/include/CL/cl.hpp:1106: error: undefined reference to 'clRetainMemObject' 
jni/include/CL/cl.hpp:2548: error: undefined reference to 'clSetKernelArg' 
jni/include/CL/cl.hpp:1108: error: undefined reference to 'clReleaseMemObject' 
jni/include/CL/cl.hpp:1106: error: undefined reference to 'clRetainMemObject' 
jni/include/CL/cl.hpp:2548: error: undefined reference to 'clSetKernelArg' 
jni/include/CL/cl.hpp:1108: error: undefined reference to 'clReleaseMemObject' 
jni/include/CL/cl.hpp:2548: error: undefined reference to 'clSetKernelArg' 
jni/include/CL/cl.hpp:2548: error: undefined reference to 'clSetKernelArg' 
jni/include/CL/cl.hpp:1106: error: undefined reference to 'clRetainMemObject' 
jni/include/CL/cl.hpp:1108: error: undefined reference to 'clReleaseMemObject' 
jni/include/CL/cl.hpp:1106: error: undefined reference to 'clRetainMemObject' 
jni/include/CL/cl.hpp:1108: error: undefined reference to 'clReleaseMemObject' 
jni/include/CL/cl.hpp:3248: error: undefined reference to 'clEnqueueNDRangeKernel' 
jni/include/CL/cl.hpp:1144: error: undefined reference to 'clReleaseEvent' 
jni/include/CL/cl.hpp:1090: error: undefined reference to 'clReleaseContext' 
jni/include/CL/cl.hpp:1088: error: undefined reference to 'clRetainContext' 
jni/include/CL/cl.hpp:1090: error: undefined reference to 'clReleaseContext' 
jni/include/CL/cl.hpp:1045: error: undefined reference to 'clGetContextInfo' 
jni/include/CL/cl.hpp:1099: error: undefined reference to 'clReleaseCommandQueue' 
jni/include/CL/cl.hpp:1097: error: undefined reference to 'clRetainCommandQueue' 
jni/include/CL/cl.hpp:1099: error: undefined reference to 'clReleaseCommandQueue' 
jni/include/CL/cl.hpp:2668: error: undefined reference to 'clBuildProgram' 
jni/include/CL/cl.hpp:2769: error: undefined reference to 'clCreateKernel' 
jni/include/CL/cl.hpp:1135: error: undefined reference to 'clReleaseKernel' 
jni/include/CL/cl.hpp:1133: error: undefined reference to 'clRetainKernel' 
jni/include/CL/cl.hpp:1135: error: undefined reference to 'clReleaseKernel' 
jni/include/CL/cl.hpp:2769: error: undefined reference to 'clCreateKernel' 
jni/include/CL/cl.hpp:1135: error: undefined reference to 'clReleaseKernel' 
jni/include/CL/cl.hpp:1133: error: undefined reference to 'clRetainKernel' 
jni/include/CL/cl.hpp:2769: error: undefined reference to 'clCreateKernel' 
jni/include/CL/cl.hpp:1133: error: undefined reference to 'clRetainKernel' 
jni/include/CL/cl.hpp:1090: error: undefined reference to 'clReleaseContext' 
jni/include/CL/cl.hpp:1099: error: undefined reference to 'clReleaseCommandQueue' 
/home/xxx/NVPACK/android-sdk-linux/ndk-bundle/build/core/build-binary.mk:702 : la recette pour la cible « obj/local/x86_64/libJNIProcessor.so » a échouée 
jni/include/CL/cl.hpp:1473: error: undefined reference to 'clGetPlatformIDs' 
jni/include/CL/cl.hpp:1480: error: undefined reference to 'clGetPlatformIDs' 
jni/include/CL/cl.hpp:1534: error: undefined reference to 'clCreateContextFromType' 
jni/include/CL/cl.hpp:2791: error: undefined reference to 'clCreateCommandQueue' 
jni/include/CL/cl.hpp:2602: error: undefined reference to 'clCreateProgramWithSource' 
jni/include/CL/cl.hpp:1126: error: undefined reference to 'clReleaseProgram' 
jni/include/CL/cl.hpp:1037: error: undefined reference to 'clGetProgramBuildInfo' 
jni/include/CL/cl.hpp:1855: error: undefined reference to 'clCreateBuffer' 
clang++: error: linker command failed with exit code 1 (use -v to see invocation) 

编辑: 我删除所有的OpenCL计划,我只是设置OpenCL的lib和我得到的是:

x86_64-linux-android/bin/ld: error: jni/libs/libOpenCL.so: incompatible target 
/home/xxxx/NVPACK/android-sdk-linux/ndk-bundle/build/core/build-binary.mk:702 : la recette pour la cible « obj/local/x86_64/libJNIProcessor.so » a échouée 

编辑2:

我终于下载NDK10e(我用的,当我第一次编译该项目的名称)和建设工程。但在执行我得到的日志错误:

02-22 10:00:41.077 7302 7302 D AndroidRuntime: Shutting down VM 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: FATAL EXCEPTION: main 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: Process: com.example.subsamplecamera, PID: 7302 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libGLES_mali.so" not found 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at java.lang.Runtime.loadLibrary0(Runtime.java:977) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at java.lang.System.loadLibrary(System.java:1530) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at com.example.subsamplecamera.MainActivity.<clinit>(MainActivity.java:30) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at java.lang.Class.newInstance(Native Method) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.Instrumentation.newActivity(Instrumentation.java:1100) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2551) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.ActivityThread.-wrap12(ActivityThread.java) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6123) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 
02-22 10:00:41.078 7302 7302 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.ru 

但我没有马里GPU,为什么项目呼吁马里库

编辑3: 我终于成功了,程序编译正确和应用程序运行。 我将标准NDK10e更改为Snapdragon LLVM,它看起来可行。 现在我OpenCL的内核executiong:

gQueue.enqueueNDRangeKernel(gNV21Kernel, 
       cl::NullRange, 
       cl::NDRange((int)ceil((float)w/16.0f)*16,(int)ceil((float)h/16.0f)*16), 
       cl::NDRange(4,1), 
       NULL, 
       NULL); 

我不明白,错误过程中添加一个错误。有人可以帮我解决这个问题吗? CL ::错误-36

回答

1

基本上,这个问题可能造成的原因:

  • OpenCL的Android上没有正式由谷歌支持。因此,您可能会发现 可能会在某些Android设备上看到OpenCL不受支持。尽管到目前为止,大多数旗舰设备都具有OpenCL支持,例如带有高通/三星芯片组的设备(谷歌Nexus 设备除外,但对于某些Nexus设备有解决方法,请在线谷歌联系我们 ) 。
  • 如果您清楚地知道您的应用只能在某些设备上运行,其中 支持OpenCL,则可以继续操作。 Qualcomm上的OpenCL和 三星芯片组现在非常稳定,编译器 已经优化了好几年;因此,您可以期望这些设备具有良好的性能。
+0

谢谢你的回答。 OpenCL lib似乎得到了支持,因为在Qualcomm网站上有用于我的芯片组的OpenCL文件的adrenosdk,但是没有完整的项目。 –

+0

没关系! :)让我检查一下对你来说 –

+0

你能分享链接写在哪里OpenCL lib被支持吗? –