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

Reply via email to