我猜我已经因为这种问题而大为震惊。我将Visual Studio 2015社区与qt5.6.0(msvc2015_64)结合使用,以便制作一个QOpenglWidget来演示使用OpenCL的设备所计算的结果。

现在我盲目地使用函数“wglGetCurrentContext”和“wglGetCurrentDC”创建上下文,错误是:

“在函数“保护的:无效的_cdecl VolRenGL::createCLContext(int,char const *)”中引用的LNK2019不可解析的外部符号_imp_wglGetCurrentContext(?createCLContext @ VolRenGL @ IEAAXHPEAPEBD @ Z)”
“在函数“中保护的:无效的_cdecl VolRenGL::createCLContext(int,char const *)”(?createCLContext @ VolRenGL @@ IEAAXHPEAPEBD @ Z)中引用的LNK2019不可解析的外部符号_imp_wglGetCurrentDC

相关代码:

cl_context_properties props[] =
        {
            CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
            CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(),
            CL_CONTEXT_PLATFORM, (cl_context_properties)cpPlatform,
            0
        };
        cxGPUContext = clCreateContext(props, 1, &cdDevices[uiDeviceUsed], NULL, NULL, &err);

最佳答案

愚蠢的问题,但是您是否将程序与opengl32.lib/dll链接在一起?在Windows中,链接到DLL的符号不会“泄漏”,因此您必须链接到正确的库。 Qt还提供了一个OpenGL加载器,从而掩盖了这个问题,因此,如果您编写了一个完全惯用的Qt OpenGL程序,则无需真正与opengl32.lib/dll进行显式链接即可

10-05 18:53