c++ - 如何将 Qt 头文件包含到内核中?

标签 c++ qt opencl

我想要这样的东西:

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

最佳答案

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

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

关于c++ - 如何将 Qt 头文件包含到内核中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699961/

相关文章:

c++ - 避免链接到 libstdc++

c++ - 动态 Qt 字符串翻译

c++ - 将按钮连接到任意函数

c++ - 在forever循环或void循环中执行一次(once)吗?

c++ - 在有限递归循环中操作大型数组时,我应该从堆栈切换到堆的什么点?

Android JNI 本地引用表,转储当前状态

c++ - 从 tcp 服务器打开 8MP H264 流时出现问题

将 float2 转换为 double2,反之亦然

c++ - OpenCL - 绘制到 OpenGL 纹理崩溃

c++ - 调用任何入队命令时 OpenCL CL_INVALID_COMMAND_QUEUE