arrayfire / androidcl

Sample app that runs OpenCL kernels to process camera feed on Android devices

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Libopencl.so compile error

Vishvarajs opened this issue · comments

we try to build saple code but we get below error

./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cb(_cl_program*, void*)': /home/einfochips/androidcl/jni/processor.cpp:59: undefined reference to clRetainProgram'
/home/einfochips/androidcl/jni/processor.cpp:61: undefined reference to clGetProgramInfo' /home/einfochips/androidcl/jni/processor.cpp:63: undefined reference to clGetProgramBuildInfo'
/home/einfochips/androidcl/jni/processor.cpp:64: undefined reference to clReleaseProgram' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_context*>::release(_cl_context*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1090: undefined reference to clReleaseContext' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_command_queue*>::release(_cl_command_queue*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1099: undefined reference to clReleaseCommandQueue' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_kernel*>::release(_cl_kernel*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1135: undefined reference to clReleaseKernel' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::Program::Program(cl::Context const&, std::__ndk1::vector<std::__ndk1::pair<char const*, unsigned long>, std::__ndk1::allocator<std::__ndk1::pair<char const*, unsigned long> > > const&, int*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2603: undefined reference to clCreateProgramWithSource' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_program*>::release(_cl_program*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1126: undefined reference to clReleaseProgram' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::Buffer::Buffer(cl::Context const&, unsigned long, unsigned long, void*, int*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1855: undefined reference to clCreateBuffer' /home/einfochips/androidcl/jni/include/CL/cl.hpp:1855: undefined reference to clCreateBuffer'
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1855: undefined reference to clCreateBuffer' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArg(unsigned int, int)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg' /home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::retain(_cl_mem*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1106: undefined reference to clRetainMemObject'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArg<cl::Buffer>(unsigned int, cl::Buffer)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::release(_cl_mem*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::retain(_cl_mem*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1106: undefined reference to clRetainMemObject'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArg<cl::Buffer>(unsigned int, cl::Buffer)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::release(_cl_mem*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::CommandQueue::enqueueNDRangeKernel(cl::Kernel const&, cl::NDRange const&, cl::NDRange const&, cl::NDRange const&, std::__ndk1::vector<cl::Event, std::__ndk1::allocator<cl::Event> > const*, cl::Event*) const': /home/einfochips/androidcl/jni/include/CL/cl.hpp:3256: undefined reference to clEnqueueNDRangeKernel'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArg<int>(unsigned int, int)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg'
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::retain(_cl_mem*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1106: undefined reference to clRetainMemObject' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArgcl::Buffer(unsigned int, cl::Buffer)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::release(_cl_mem*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::retain(_cl_mem*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1106: undefined reference to clRetainMemObject' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::Kernel::setArgcl::Buffer(unsigned int, cl::Buffer)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2553: undefined reference to clSetKernelArg' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::release(_cl_mem*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::CommandQueue::enqueueNDRangeKernel(cl::Kernel const&, cl::NDRange const&, cl::NDRange const&, cl::NDRange const&, std::__ndk1::vector<cl::Event, std::__ndk1::allocatorcl::Event > const*, cl::Event*) const':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:3256: undefined reference to clEnqueueNDRangeKernel' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::CommandQueue::enqueueReadBuffer(cl::Buffer const&, unsigned int, unsigned long, unsigned long, void*, std::__ndk1::vector<cl::Event, std::__ndk1::allocatorcl::Event > const*, cl::Event*) const':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:2859: undefined reference to clEnqueueReadBuffer' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_mem*>::release(_cl_mem*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject' /home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject'
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject' /home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject'
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: undefined reference to clReleaseMemObject' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o:/home/einfochips/androidcl/jni/include/CL/cl.hpp:1108: more undefined references to clReleaseMemObject' follow
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::Platform::get(std::__ndk1::vector<cl::Platform, std::__ndk1::allocator<cl::Platform> >*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1473: undefined reference to clGetPlatformIDs'
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1480: undefined reference to clGetPlatformIDs' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::Context::Context(unsigned long, long*, void ()(char const, void const*, unsigned long, void*), void*, int*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1535: undefined reference to clCreateContextFromType' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_context*>::release(_cl_context*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1090: undefined reference to clReleaseContext' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_context*>::retain(_cl_context*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1088: undefined reference to clRetainContext' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_context*>::release(_cl_context*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1090: undefined reference to clReleaseContext' ./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function int cl::detail::getInfo<int ()(_cl_context, unsigned int, unsigned long, void*, unsigned long*), _cl_context*, std::__ndk1::vector<cl::Device, std::__ndk1::allocatorcl::Device > >(int ()(_cl_context, unsigned int, unsigned long, void*, unsigned long*), _cl_context* const&, unsigned int, std::__ndk1::vector<cl::Device, std::__ndk1::allocatorcl::Device >*)':
/home/einfochips/androidcl/jni/include/CL/cl.hpp:1046: undefined reference to clGetContextInfo' /home/einfochips/androidcl/jni/include/CL/cl.hpp:1046: undefined reference to clGetContextInfo'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::CommandQueue::CommandQueue(cl::Context const&, cl::Device const&, unsigned long, int*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:2792: undefined reference to clCreateCommandQueue'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_command_queue*>::release(_cl_command_queue*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1099: undefined reference to clReleaseCommandQueue'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_command_queue*>::retain(_cl_command_queue*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1097: undefined reference to clRetainCommandQueue'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::detail::ReferenceHandler<_cl_command_queue*>::release(_cl_command_queue*)': /home/einfochips/androidcl/jni/include/CL/cl.hpp:1099: undefined reference to clReleaseCommandQueue'
./obj/local/arm64-v8a/objs/JNIProcessor/processor.o: In function cl::Program::build(std::__ndk1::vector<cl::Device, std::__ndk1::allocator<cl::Device> > const&, char const*, void (*)(_cl_program*, void*), void*) const': /home/einfochips/androidcl/jni/include/CL/cl.hpp:2676: undefined reference to clBuildProgram'

It look like CL lib did n't' link properly .

Please guide us if we miss something on above issue.

@Vishvarajs What you said is correct, the OpenCL lib was not found. Did you copy the file from your phone to the development machine ? The last time I remember, the lib file is available on the phone and it needs to be copied to the development machine for successful cross compilation.

Note: We haven't tested latest(3.6.1) ArrayFire with Android SDK in a while. Java wrapper hasn't been worked on in a while and android support is kind of dependent on that.

Glad you figured it out. I don't think I got your question. Are you asking suggestions for materials on image stitching ? or ArrayFire examples for image stitching ?

@Vishvarajs The functionality provided by ArrayFire are more like fundamental blocks that have to be used to design more complex algorithms. Having said that, we do provide complex functions some times based on demand by users.

At the moment, we don't have any built-in functions that stitch two images. However, you might be able to do this using a combination of JIT and indexing operations. Whether the a given stitch algorithm can be implemented on top of ArrayFire is entirely dependent on the steps involved in the algorithm.

The answer to your question is What kind of images are you trying to stitch together ?

  • Panorama stitching - this is something that can be done using ArrayFire I think because it involves using feature detection functions such as homography etc.. Given below are some blog posts regarding this type of stitching.
  • I personally have only implemented one type of stitching, Coordinates for Instant Image Cloning
    which is very good indeed for the said purpose. My implementation was not based on ArrayFire though. In fact, it didn't use any CUDA/OpenCL at all. I believe this is an example of stitching that can't be done using stock functionality of ArrayFire because it involves some computations that I believe cannot be done using ArrayFire.

I am closing the issue as the original question had been addressed. You can ask more questions on our arrayfire-org slack community.