2017-02-21 3 views
0

Ich möchte ein Android Eclipse-Projekt verwenden, um OpenCL-Bibliothek zu verwenden. Ich habe mein Eclipse-Projekt für mein vorheriges Handy ein Samsung Alpha eingerichtet. Jetzt bekomme ich ein Moto Z und möchte dieses Projekt ändern, um es wiederzuverwenden.LibOpenCL in Android-Projekt integrieren

Ich erhalte die libOpenCL.so Datei von meinem Handy und ich juts die Datei auf meinem Projekt ändern, aber die Zusammenstellung mir, dass Fehler senden:

[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) 

Edit: Ich entferne alle Programm OpenCL und ich gerade eingestellt die OpenCL lib und ich, dass:

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 

Edit 2:

ich endlich die NDK10e herunterladen (die, die ich verwendet, wenn ich dieses Projekt zunächst kompilieren) und Der Bau funktioniert. Aber auf der Ausführung bekomme ich diesen Fehler auf log:

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 

Aber ich habe nicht mali GPU, warum das Projekt mali Bibliothek ruft

Bearbeiten 3: ich es endlich geschafft, das Programm der Kompilierung richtig und die App läuft. Ich ändere den Standart NDK10e zum Snapdragon LLVM und es scheint zu funktionieren. Nun füge ich einen Fehler bei der executiong des OpenCL-Kernel .:

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); 

Ich verstehe nicht, dass Fehler. Kann mir jemand dabei helfen? CL :: Fehler -36

Antwort

1

Grundsätzlich ist das Problem, wie verursacht haben könnte, weil:

  • OpenCL auf Android ist nicht offiziell von Google unterstützt. Daher können Sie unter Umständen erwarten, dass OpenCL auf einigen Android-Geräten nicht unterstützt wird. Obwohl die meisten der Flaggschiff-Geräte haben die OpenCL-Unterstützung, wie Geräte mit Qualcomm/Samsung-Chipsätzen (außer Google Nexus Geräte, aber es gibt eine Ausweichlösung für einige Nexus-Geräte, bitte google online).
  • Wenn Sie eindeutig wissen, dass Ihre App nur auf bestimmten Geräten läuft, die OpenCL unterstützen, können Sie weitermachen. Das OpenCL auf Qualcomm und Samsung Chipsets ist im Moment ziemlich stabil, und der Compiler hat für einige Jahre optimiert worden; Daher können Sie erwarten, dass einige der gute Leistung von diesen Geräten.
+0

Vielen Dank für die Antwort. Die OpenCL-Lib scheint unterstützt zu werden, da auf der QualCOMM-Website adrenosdk mit OpenCL-Dateien für meinen Chipsatz existiert, aber es gibt kein komplettes Projekt. –

+0

Das ist in Ordnung! :) Lassen Sie mich das für Sie überprüfen –

+0

Können Sie Link teilen, wo es geschrieben wird, dass OpenCL-Lib unterstützt wird? –