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.