Compile OpenCL on Mingw Nvidia SDK

六月ゝ 毕业季﹏ 提交于 2019-12-03 00:48:54
Erik Duymelinck

We have been able to do this by using the MinGW reimp and dlltool utilities to create an import library "libOpenCL.a" for the "OpenCL.dll" DLL. Here are the steps we followed:

  • step 1: Make sure you have mingw-utils installed (for reimp and dlltool). If you don't, at a MinGW prompt, type:

    mingw-get install mingw-utils

  • step 2: Next, type the following command:

    reimp OpenCL.lib

This should yield an OpenCL.def and libOpenCL.a file. If the result is something along the lines of "invalid or corrupt import library", the alternative step 2 should work.

  • alternative step 2: Use dlltool together with a .def file that you can find here: http://pastebin.com/f2ac38b2f . The command becomes:

    dlltool -l libOpenCL.a -d OpenCL.def -A -k

You can now link against the newly created libOpenCL.a. If you still see missing symbols, add them to the .def file and repeat the dlltool command.

We were able to get this all working thanks to the information found in following posts, for reference:

  1. http://oscarbg.blogspot.com/2009/12/opencl-with-mingw.html
  2. http://www.mingw.org/wiki/CreateImportLibraries (I can only paste 2 links)

OpenCL libraries are just stubs to the OpenCL.dll. I recomend therefore using a dynamic loading technique. It will simply solve all your problems. Or do you really need some of the nVIDIA tweaks of OpenCL?

It is not only safer at runtime, but also easyer to compile since you need no linker nor defines, nor anything. Just a simple cpp/hpp files added to your proyect.

A very good one to use is CLEW. However I don't agree completely with that library, because C++ wrappers are broken. So maybe you will need some tweaking. Also I typically disable the "atexit" code, since it can be problematic.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!