【问题标题】:OpenCL C/C++ dynamic binding library (win32 and more)OpenCL C/C++ 动态绑定库(win32 等)
【发布时间】:2011-02-17 15:21:06
【问题描述】:

我正在尝试使用 OpenCL,为了将其投入生产,我希望能够动态绑定到 OpenCL.DLL(在 Windows 下),以便“优雅地”处理以下情况主机上没有安装 OpenCL。

是否有任何可用的库(或代码 sn-p)来处理 C 或 C++ 中的这种动态绑定,就像 GLEW 为 OpenGL 所做的那样?我想避免麻烦自己做。

谢谢,

【问题讨论】:

    标签: c++ c dll opencl dynamic-linking


    【解决方案1】:

    【讨论】:

    • 感谢您的链接,我试了一下,它看起来大部分都很好。不过,我被一个无声的错误所困扰:由于我的项目是使用 Unicode 字符集构建的,所以当调用 LoadLibraryW 函数时,clewInit 的模块名称的 const char* 被无声地转换为 LPCWSTR。然后 LoadLibrary 调用失败,似乎没有什么好的理由。花了一些时间才弄清楚。
    【解决方案2】:

    由于您正在处理 Win32,因此最简单的解决方案是延迟加载。如果你延迟加载 OpenCL,并且编译器添加的存根找不到它,它将调用__pfnDliFailureHook2(dliFailLoadLib)。您可以在那里处理错误;如果您不提供处理程序,您将获得默认行为(程序中止)。在任何一种情况下,程序都不会对 OpenCL 产生静态依赖。

    【讨论】:

    • 感谢您的建议。动态绑定更灵活,只允许绑定可用的入口点(如果支持多个版本添加/删除功能,请参阅 OpenGL);延迟加载 OpenCL 是否允许处理这种情况?
    • 是的,您的__pfnDliFailureHook2 也可以处理个别功能不可用的情况,这就是dliFailGetProc 的作用。
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多