Can't link Opencl.lib with CL compiler

426 views Asked by At

I have an OpenCL program written in C and in the same directory I have OpenCL.dll and its relative .lib and .exp named OpenCL32.lib and OpenCL32.exp which I've exported from OpenCL.dll.

I use the following compile command

cl.exe /Zi /EHsc /nologo /IC:\Users\marco\Desktop\OpenCL-Headers /Fe: main.exe *.c /link OpenCL32.lib

and I get this error

main.obj : error LNK2019: riferimento al simbolo esterno _clGetPlatformIDs@12 non risolto nella funzione _get_GPU_platform
main.obj : error LNK2019: riferimento al simbolo esterno _clGetPlatformInfo@20 non risolto nella funzione _get_GPU_platform
main.obj : error LNK2019: riferimento al simbolo esterno _clGetDeviceIDs@24 non risolto nella funzione _get_num_GPU_devices
main.obj : error LNK2019: riferimento al simbolo esterno _clGetDeviceInfo@20 non risolto nella funzione _get_GPU_mem
main.obj : error LNK2019: riferimento al simbolo esterno _clCreateContext@24 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clReleaseContext@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clReleaseCommandQueue@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clCreateBuffer@24 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clReleaseMemObject@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clCreateProgramWithSource@20 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clReleaseProgram@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clBuildProgram@24 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clGetProgramBuildInfo@24 non risolto nella funzione _print_build_log_failure
main.obj : error LNK2019: riferimento al simbolo esterno _clCreateKernel@12 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clReleaseKernel@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clSetKernelArg@16 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clGetKernelWorkGroupInfo@24 non risolto nella funzione _get_work_group_size
main.obj : error LNK2019: riferimento al simbolo esterno _clFinish@4 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clEnqueueReadBuffer@36 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clEnqueueNDRangeKernel@36 non risolto nella funzione _run_kernel
main.obj : error LNK2019: riferimento al simbolo esterno _clCreateCommandQueue@20 non risolto nella funzione _run_kernel
main.exe : fatal error LNK1120: 21 esterni non risolti

I used OpenCL.dll from System32 and this is the dumpbin result

dumpbin /exports C:\\Windows\\System32\\OpenCL.dll  
Microsoft (R) COFF/PE Dumper Version 14.28.29913.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\\Windows\\System32\\OpenCL.dll

File Type: DLL

  Section contains the following exports for OpenCL.dll

    00000000 characteristics
    FFFFFFFF time date stamp    
        0.00 version
           1 ordinal base       
         120 number of functions
         120 number of names    

    ordinal hint RVA      name  

          1    0 000013F0 clBuildProgram
          2    1 00001410 clCloneKernel
          3    2 00001430 clCompileProgram
          4    3 00001450 clCreateBuffer
          5    4 00001480 clCreateCommandQueue
          6    5 000014A0 clCreateCommandQueueWithProperties
          7    6 000014C0 clCreateContext        
          8    7 00001560 clCreateContextFromType
          9    8 00001790 clCreateFromGLBuffer
         10    9 000017B0 clCreateFromGLRenderbuffer
         11    A 000017D0 clCreateFromGLTexture
         12    B 00001800 clCreateFromGLTexture2D
         13    C 00001830 clCreateFromGLTexture3D
         14    D 00001860 clCreateImage
         15    E 00001890 clCreateImage2D
         16    F 000018C0 clCreateImage3D
         17   10 000018F0 clCreateKernel
         18   11 00001910 clCreateKernelsInProgram
         19   12 00001930 clCreatePipe
         20   13 00001960 clCreateProgramWithBinary
         21   14 00001990 clCreateProgramWithBuiltInKernels
         22   15 000019C0 clCreateProgramWithIL
         23   16 000019E0 clCreateProgramWithSource
         24   17 00001A10 clCreateSampler
         25   18 00001A40 clCreateSamplerWithProperties
         26   19 00001A60 clCreateSubBuffer
         27   1A 00001A90 clCreateSubDevices
         28   1B 00001AD0 clCreateUserEvent
         29   1C 00001B70 clEnqueueAcquireGLObjects
         30   1D 00001B90 clEnqueueBarrier
         31   1E 00001BB0 clEnqueueBarrierWithWaitList
         32   1F 00001BD0 clEnqueueCopyBuffer
         33   20 00001BF0 clEnqueueCopyBufferRect
         34   21 00001C10 clEnqueueCopyBufferToImage
         35   22 00001C30 clEnqueueCopyImage
         36   23 00001C50 clEnqueueCopyImageToBuffer
         37   24 00001C70 clEnqueueFillBuffer
         38   25 00001C90 clEnqueueFillImage
         39   26 00001CB0 clEnqueueMapBuffer
         40   27 00001CE0 clEnqueueMapImage
         41   28 00001D10 clEnqueueMarker
         42   29 00001D30 clEnqueueMarkerWithWaitList
         43   2A 00001D50 clEnqueueMigrateMemObjects
         44   2B 00001D70 clEnqueueNDRangeKernel
         45   2C 00001D90 clEnqueueNativeKernel
         46   2D 00001DB0 clEnqueueReadBuffer
         47   2E 00001DD0 clEnqueueReadBufferRect
         48   2F 00001DF0 clEnqueueReadImage
         49   30 00001E90 clEnqueueReleaseGLObjects
         50   31 00001EB0 clEnqueueSVMFree
         51   32 00001ED0 clEnqueueSVMMap
         52   33 00001EF0 clEnqueueSVMMemFill
         53   34 00001F10 clEnqueueSVMMemcpy
         54   35 00001F30 clEnqueueSVMMigrateMem
         55   36 00001F50 clEnqueueSVMUnmap
         56   37 00001F70 clEnqueueTask
         57   38 00001F90 clEnqueueUnmapMemObject
         58   39 00001FB0 clEnqueueWaitForEvents
         59   3A 00001FD0 clEnqueueWriteBuffer
         60   3B 00001FF0 clEnqueueWriteBufferRect
         61   3C 00002010 clEnqueueWriteImage
         62   3D 00002030 clFinish
         63   3E 00002050 clFlush
         64   3F 00002070 clGetCommandQueueInfo
         65   40 00002080 clGetContextInfo
         66   41 00002090 clGetDeviceAndHostTimer
         67   42 000020B0 clGetDeviceIDs
         68   43 00002180 clGetDeviceInfo
         69   44 00002190 clGetEventInfo
         70   45 000021B0 clGetEventProfilingInfo
         71   46 000021D0 clGetExtensionFunctionAddress
         72   47 00002790 clGetExtensionFunctionAddressForPlatform
         73   48 00002D70 clGetGLObjectInfo
         74   49 00002D90 clGetGLTextureInfo
         75   4A 00002DB0 clGetHostTimer
         76   4B 00002DD0 clGetImageInfo
         77   4C 00002DF0 clGetKernelArgInfo
         78   4D 00002E10 clGetKernelInfo
         79   4E 00002E30 clGetKernelSubGroupInfo
         80   4F 00002E70 clGetKernelWorkGroupInfo
         81   50 00002E90 clGetMemObjectInfo
         82   51 00002EB0 clGetPipeInfo
         83   52 00002ED0 clGetPlatformIDs
         84   53 00002FB0 clGetPlatformInfo
         85   54 00003010 clGetProgramBuildInfo
         86   55 00003030 clGetProgramInfo
         87   56 00003050 clGetSamplerInfo
         88   57 00003070 clGetSupportedImageFormats
         89   58 00003090 clLinkProgram
         90   59 000030C0 clReleaseCommandQueue
         91   5A 000030D0 clReleaseContext
         92   5B 000030E0 clReleaseDevice
         93   5C 00003120 clReleaseEvent
         94   5D 00003140 clReleaseKernel
         95   5E 00003160 clReleaseMemObject
         96   5F 00003180 clReleaseProgram
         97   60 000031A0 clReleaseSampler
         98   61 000031C0 clRetainCommandQueue
         99   62 000031D0 clRetainContext
        100   63 000031E0 clRetainDevice
        101   64 00003220 clRetainEvent
        102   65 00003240 clRetainKernel
        103   66 00003260 clRetainMemObject
        104   67 00003280 clRetainProgram
        105   68 000032A0 clRetainSampler
        106   69 000032C0 clSVMAlloc
        107   6A 000032E0 clSVMFree
        108   6B 00003300 clSetCommandQueueProperty
        109   6C 00003310 clSetDefaultDeviceCommandQueue
        110   6D 00003330 clSetEventCallback
        111   6E 00003350 clSetKernelArg
        112   6F 00003370 clSetKernelArgSVMPointer
        113   70 00003390 clSetKernelExecInfo
        114   71 000033B0 clSetMemObjectDestructorCallback
        115   72 000033D0 clSetProgramReleaseCallback
        116   73 000033F0 clSetProgramSpecializationConstant
        117   74 00003410 clSetUserEventStatus
        118   75 00003430 clUnloadCompiler
        119   76 00003440 clUnloadPlatformCompiler
        120   77 00003470 clWaitForEvents

  Summary

        2000 .data
        2000 .pdata
        B000 .rdata
        1000 .reloc
        1000 .rsrc
       11000 .text
        1000 _RDATA

Any suggestion? Thanks.

1

There are 1 answers

2
ProjectPhysX On

Follow the steps described here. You have to tell Visual Studio the location of OpenCL.lib in the project settings for linking.