2014-02-11 34 views
0

我想是这样的:如何将Qt头文件包含到内核中?

#include <QImage> 

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

但我得到一个运行时错误:

Invalid parameter passed to C runtime function.

如何解决这个问题呢?

主机:

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

回答

2

不能包括C或C++报头插入的OpenCL C代码以及链路防止静电或共享的C/C++库。

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