hi, zeranoe Do you want to do that on windows (eg. msys/msys2) ? If so, here is my way to generate libOpenCL.a (OpenCL.dll import library).
On Win64 System 1. generate .def files (a) for 64bit mkdir lib64 && gendef - /c/Windows/system32/OpenCL.dll> lib64/OpenCL.def (b) for 32bit mkdir lib32 && gendef - /c/Windows/SysWOW64/OpenCL.dll> lib32/OpenCL.def 2. generate import libraries (a) for 64bit x86_64-w64-mingw32-dlltool -l lib64/libOpenCL.a -d lib64/OpenCL.def -A -k (b) for 32bit i686-w64-mingw32-dlltool -l lib32/libOpenCL.a -d lib32/OpenCL.def -A -k I use these import libraries when I build FFmpeg. ---------------------------------------- > From: zera...@gmail.com > To: mingw-w64-public@lists.sourceforge.net > Date: Fri, 4 Sep 2015 23:17:22 -0400 > Subject: [Mingw-w64-public] Unable to link OpenCL for i686 > > I'm unable to link OpenCL for i686, but x86_64 works. > > I'm creating the library files (.a) from a def file using dlltool. The def > file and headers come from the ICD archive found here: > https://www.khronos.org/registry/cl/ > > I'm attempting to run the following bash compile script: > > for arch in "i686" "x86_64"; do > opencl_dir="$working_dir/opencl-1.2.11.0-$arch" > $arch-w64-mingw32-dlltool --input-def "libOpenCL.def" > --no-leading-underscore --output-lib "$opencl_dir/lib/libOpenCL.a" > $arch-w64-mingw32-gcc -I"$opencl_dir/include" -std=c99 -c -o > "link-opencl.o" "link-opencl.c" > $arch-w64-mingw32-gcc -L"$opencl_dir/lib" -o "link-opencl-$arch.exe" > "link-opencl.o" -lOpenCL > done > > The compile script outputs the following: > > link-opencl.o:link-opencl.c:(.text+0x4): undefined reference to > `clEnqueueNDRangeKernel@36' > collect2: error: ld returned 1 exit status > link-opencl.c: In function 'check_clEnqueueNDRangeKernel': > link-opencl.c:2:50: warning: cast from pointer to integer of different size > [-Wpointer-to-int-cast] > long check_clEnqueueNDRangeKernel(void) { return (long) > clEnqueueNDRangeKernel; } > > The first part (undefined reference to `clEnqueueNDRangeKernel@36') is i686, > and the 2nd is x86_64 which succeeds with a warning. > > link-opencl.c contains: > > #include <CL/cl.h> > long check_clEnqueueNDRangeKernel(void) { return (long) > clEnqueueNDRangeKernel; } > int main(void) { return 0; } > > Running an objdump on each libOpenCL.a results in: > I686: > [ 7](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 > clEnqueueNDRangeKernel > [ 8](sec 5)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 > __imp_clEnqueueNDRangeKernel > > X86_64: > [ 7](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000000 > clEnqueueNDRangeKernel > [ 8](sec 5)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000000 > __imp_clEnqueueNDRangeKernel > > Thanks, > Kyle > > > ------------------------------------------------------------------------------ > _______________________________________________ > Mingw-w64-public mailing list > Mingw-w64-public@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public ------------------------------------------------------------------------------ _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public