2014-02-11 6 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' препроцессора или скомпилированы вместе в один двоичный файл на этапе построения программы.

Смежные вопросы