I have my library libOCL_GridFF.so
which depends on libOpenCL.so
and libclFFT.so
.
I try to compile it using CMake
like this:
find_package( OpenCL REQUIRED )
find_package( clFFT REQUIRED )
add_library(OCL_GridFF SHARED OCL_GridFF.cpp ${OPENCL_LIBRARY} ${clFFT_LIBRARY} )
but it does not seem to include any dependence to the libraries (libOpenCL.so
and libclFFT.so
)
prokophapala@ProkopDesktop:~/git/FireCore/cpp/Build_OCL/libs_OCL$ ldd libOCL_GridFF.so
linux-vdso.so.1 (0x00007ffef5546000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff4ae84c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff4ae765000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff4ae745000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff4ae51d000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff4aeaac000)
Then when I try to load the library with python like this
lib = ct.CDLL( "../../cpp/Build_OCL/libs_OCL/libOCL_GridFF.so", ct.RTLD_LOCAL )
it throws errors:
OSError: ../../cpp/Build_OCL/libs_OCL/libOCL_GridFF.so: undefined symbol: clBuildProgram
and really these symbols are undefined:
prokophapala@ProkopDesktop:~/git/FireCore/cpp/Build_OCL/libs_OCL$ ld libOCL_GridFF.so
ld: warning: cannot find entry symbol _start; not setting start address
ld: libOCL_GridFF.so: undefined reference to `clBuildProgram'
ld: libOCL_GridFF.so: undefined reference to `clEnqueueNDRangeKernel'
ld: libOCL_GridFF.so: undefined reference to `clSetKernelArg'
ld: libOCL_GridFF.so: undefined reference to `clEnqueueCopyBufferToImage'
ld: libOCL_GridFF.so: undefined reference to `clReleaseMemObject'
ld: libOCL_GridFF.so: undefined reference to `clFinish'
ld: libOCL_GridFF.so: undefined reference to `clfftSetResultLocation'
ld: libOCL_GridFF.so: undefined reference to `clReleaseContext'
ld: libOCL_GridFF.so: undefined reference to `clfftSetPlanPrecision'
ld: libOCL_GridFF.so: undefined reference to `clfftCreateDefaultPlan'
ld: libOCL_GridFF.so: undefined reference to `clEnqueueWriteBuffer'
ld: libOCL_GridFF.so: undefined reference to `clEnqueueCopyBuffer'
ld: libOCL_GridFF.so: undefined reference to `clEnqueueReadBuffer'
ld: libOCL_GridFF.so: undefined reference to `clfftBakePlan'
ld: libOCL_GridFF.so: undefined reference to `clGetProgramBuildInfo'
ld: libOCL_GridFF.so: undefined reference to `clfftSetup'
ld: libOCL_GridFF.so: undefined reference to `clCreateContext'
ld: libOCL_GridFF.so: undefined reference to `clCreateImage3D'
ld: libOCL_GridFF.so: undefined reference to `clGetDeviceIDs'
ld: libOCL_GridFF.so: undefined reference to `clGetDeviceInfo'
ld: libOCL_GridFF.so: undefined reference to `clReleaseCommandQueue'
ld: libOCL_GridFF.so: undefined reference to `clGetPlatformIDs'
ld: libOCL_GridFF.so: undefined reference to `clCreateCommandQueue'
ld: libOCL_GridFF.so: undefined reference to `clfftEnqueueTransform'
ld: libOCL_GridFF.so: undefined reference to `clfftSetLayout'
ld: libOCL_GridFF.so: undefined reference to `clReleaseProgram'
ld: libOCL_GridFF.so: undefined reference to `clCreateKernel'
ld: libOCL_GridFF.so: undefined reference to `clCreateBuffer'
ld: libOCL_GridFF.so: undefined reference to `clCreateProgramWithSource'
ld: libOCL_GridFF.so: undefined reference to `clReleaseKernel'
ld: libOCL_GridFF.so: undefined reference to `clCreateImage2D'
============= For Comparison =========
When I compile the same library using my hand-written Makefile, it works
FFLAGS="-Werror -Wno-write-strings -Wno-reorder -Wno-deprecated-declarations -Wno-unused-variable"
g++ -c -Wall -fpic $FFLAGS -o libOCL_GridFF.o libOCL_GridFF.cpp
g++ -shared -o libOCL_GridFF.so libOCL_GridFF.o -lOpenCL -lclFFT
this manually compiled version of the library works just fine in python.
it also show the proper dependencies:
prokophapala@ProkopDesktop:~/git/FireCore/pyOCL/cpp_build$ ldd libOCLfft.so
linux-vdso.so.1 (0x00007ffc607d5000)
libOpenCL.so.1 => /lib/x86_64-linux-gnu/libOpenCL.so.1 (0x00007f0a386ec000)
libclFFT.so.2 => /lib/x86_64-linux-gnu/libclFFT.so.2 (0x00007f0a3861a000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0a383ee000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0a38307000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0a382e7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a380bd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0a3875a000)