Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在动态链接库中找不到过程入口点clCreateCommandQueueWithProperties_C++_Visual Studio_Dll_Opencl - Fatal编程技术网

C++ 在动态链接库中找不到过程入口点clCreateCommandQueueWithProperties

C++ 在动态链接库中找不到过程入口点clCreateCommandQueueWithProperties,c++,visual-studio,dll,opencl,C++,Visual Studio,Dll,Opencl,我一直在尝试让OpenCL与visual studio一起工作 我按照指南配置了 下面是我的简短示例程序 #include "stdafx.h" #include <CL/cl.h> #include <stdio.h> #include <iostream> using namespace std; const char *source = "__kernel void memset( __global uint *dst ) \n" "{ \n" "

我一直在尝试让OpenCL与visual studio一起工作

我按照指南配置了

下面是我的简短示例程序

#include "stdafx.h"
#include <CL/cl.h>
#include <stdio.h>
#include <iostream>

using namespace std;

const char *source =
"__kernel void memset( __global uint *dst ) \n"
"{ \n"
" dst[get_global_id(0)] = get_global_id(0); \n"
"} \n";

int main()
{
    cl_platform_id platform;

    clGetPlatformIDs(1, &platform, NULL);

    cl_device_id device;

    clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL);

    cl_context context = clCreateContext
    (
        NULL,
        1,
        &device,
        NULL, 
        NULL, 
        NULL
    );


    cl_command_queue queue = clCreateCommandQueueWithProperties
    (
        context,
        device,
        0, 
        NULL
    );


    return 0;

} 
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
常量字符*源=
“\uu内核void memset(\uu全局uint*dst)\n”
“{\n”
“dst[get_global_id(0)]=get_global_id(0);\n”
“}\n”;
int main()
{
cl_平台\u id平台;
clGetPlatformIDs(1,&平台,NULL);
cl_设备\u id设备;
CLGetDeviceID(平台,CL\U设备类型\U GPU,1和设备,空);
cl_context context=clCreateContext
(
无效的
1.
&装置,
无效的
无效的
无效的
);
cl_命令_队列队列=clCreateCommandQueueWithProperties
(
上下文
装置,
0, 
无效的
);
返回0;
} 
但是当我运行它时,我得到了这个运行时错误

无法找到过程入口点clCreateCommandQueueWithProperties 位于动态链接库中

我使用查看了dll,该函数确实出现在
OpenCL.dll

编辑

我认为Mats Peterson是对的,我在我的电脑上搜索了一个文件,找到了多个OpenCL.dll文件

我不知道如何合理地解决这个问题

编辑


这里可能还值得注意的是,当我删除对
clCreateCommandQueueWithProperties
的调用时,程序运行良好

我的一些朋友建议将OpenCL.DLL文件复制到我的项目目录中

这很有效


我的程序一定加载到了错误的dll文件中。

我将C:\Windows\System32\OpenCL.dll替换为位于C:\program Files(x86)\AMD APP SDK\3.0\bin\x86\OpenCL.dll中的程序

我将C:\Windows\SysWOW64\OpenCL.dll替换为位于C:\Program Files(x86)\AMD APP SDK\3.0\bin\x86\u 64\OpenCL.dll中的一个


这对我很有效。

我在尝试运行QGIS时遇到了这个错误


在OSGeo4W中重新安装OpenCL解决了这个问题。

我已经多次尝试重新安装AMD SDK,但都没有效果。这就像我的程序不知何故使用了错误的dll/版本…我猜您的编译器/链接器正在找到一个不同的CL库(例如ICD驱动程序),它不是CL2.0驱动程序。我不确定,但这可能是我的猜测(在为1.x或2.0构建驱动程序时犯了这个错误)@MatsPeterson我尝试用process Explorer检查进程,但找不到任何指示正在使用哪个dll的内容检查导出的和请求的损坏名称是否对应。(使用
objdump
或其他任何东西)。为糟糕的错误格式欢呼,其中“动态链接库”实际上应该是“动态链接库”,这似乎是可行的,但我担心会破坏任何依赖旧版本的应用程序。向后兼容性。话虽如此,也许在这些文件夹中放上最新版本会更好。