OpenCL C/C++ 动态绑定库(win32 等)
Posted
技术标签:
【中文标题】OpenCL C/C++ 动态绑定库(win32 等)【英文标题】:OpenCL C/C++ dynamic binding library (win32 and more) 【发布时间】:2011-02-17 15:21:06 【问题描述】:我正在尝试使用 OpenCL,为了将其投入生产,我希望能够动态绑定到 OpenCL.DLL(在 Windows 下),以便“优雅地”处理以下情况主机上没有安装 OpenCL。
是否有任何可用的库(或代码 sn-p)来处理 C 或 C++ 中的这种动态绑定,就像 GLEW 为 OpenGL 所做的那样?我想避免麻烦自己做。
谢谢,
【问题讨论】:
【参考方案1】:给你:
http://clcc.sourceforge.net/clew_8h.html
【讨论】:
感谢您的链接,我试了一下,它看起来大部分都很好。不过,我被一个无声的错误所困扰:由于我的项目是使用 Unicode 字符集构建的,所以当调用LoadLibraryW
函数时,clewInit
的模块名称的 const char*
被无声地转换为 LPCWSTR
。然后 LoadLibrary 调用失败,似乎没有什么好的理由。花了一些时间才弄清楚。【参考方案2】:
由于您正在处理 Win32,因此最简单的解决方案是延迟加载。如果你延迟加载 OpenCL,并且编译器添加的存根找不到它,它将调用__pfnDliFailureHook2(dliFailLoadLib)
。您可以在那里处理错误;如果您不提供处理程序,您将获得默认行为(程序中止)。在任何一种情况下,程序都不会对 OpenCL 产生静态依赖。
【讨论】:
感谢您的建议。动态绑定更灵活,只允许绑定可用的入口点(如果支持多个版本添加/删除功能,请参阅 OpenGL);延迟加载 OpenCL 是否允许处理这种情况? 是的,您的__pfnDliFailureHook2
也可以处理个别功能不可用的情况,这就是dliFailGetProc
的作用。【参考方案3】:
QtOpenCL http://labs.qt.nokia.com/2010/04/07/using-opencl-with-qt/
【讨论】:
以上是关于OpenCL C/C++ 动态绑定库(win32 等)的主要内容,如果未能解决你的问题,请参考以下文章
Clion C/C++动态库生成与调用简单Demo win11&ubuntu
Clion C/C++动态库生成与调用简单Demo win11&ubuntu