如何将Qt头包含在内核中?

时间:2014-02-11 10:59:30

标签: c++ qt opencl

我想要像:

#include <QImage>

void __kernel dither(__global int* image, __global int* result)
{
    int red = qRed(image[get_global_id(0)]);
    //...
}

但是我收到了运行时错误:

  

传递给C运行时函数的参数无效。

我该如何解决?

主机:

std::ifstream sourceFile("OrderedDitheringKernel.cl");

std::string kernelCode(std::istreambuf_iterator<char>(sourceFile),(std::istreambuf_iterator<char>()));
qDebug() << QString::fromStdString(kernelCode);

sources.push_back({kernelCode.c_str(), kernelCode.length()});

cl::Program program(context, sources);

if (program.build({defaultDevice}) != CL_SUCCESS)
{
    std::cerr << "Error while building kernel: " <<
                 program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(defaultDevice) << std::endl;
    exit(1);
}
else
    qDebug() << "Kernel compiled succesfully\n";

1 个答案:

答案 0 :(得分:2)

您不能将C或C ++标头包含在OpenCL C代码中,也不能链接到静态或共享C / C ++库。

OpenCL C是C语言的子集,不支持常见含义的链接。因此,只有'#include'预处理程序指令可以包含OpenCL C源文件,或者在程序构建阶段将它们一起编译成一个二进制文件。