无法在动态链接库

时间:2016-03-14 07:25:58

标签: c++ visual-studio dll opencl

我一直试图让OpenCL与visual studio合作。

我按照this指南配置了AMD OpenCL SDK.

这是我的简短示例程序

#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;

} 

但是当我运行它时,我得到了这个运行时错误

  

过程入口点clCreateCommandQueueWithProperties不能   位于动态链接库中

Error

我使用dll export viewer查看了dll,该功能确实出现在OpenCL.dll中。

DLL

修改

我认为Mats Petersson是对的我在我的电脑上进行了文件搜索,发现了多个OpenCL.dll文件

我不确定如何以合理的方式解决这个问题....

openCLs

修改

此处可能还值得注意的是,当我删除对clCreateCommandQueueWithProperties的调用时程序运行正常。

3 个答案:

答案 0 :(得分:2)

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

这很有效。

我的程序必须加载错误的dll文件。

答案 1 :(得分:0)

我将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_64 \ OpenCL.dll

中的一个

这对我有用。

答案 2 :(得分:0)

尝试运行QGIS时出现此错误。

在OSGeo4W中重新安装了OpenCL,从而解决了该问题。