我想要像:
#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";
答案 0 :(得分:2)
您不能将C或C ++标头包含在OpenCL C代码中,也不能链接到静态或共享C / C ++库。
OpenCL C是C语言的子集,不支持常见含义的链接。因此,只有'#include'预处理程序指令可以包含OpenCL C源文件,或者在程序构建阶段将它们一起编译成一个二进制文件。