c++ - 将 OpenCL 代码嵌入到可执行文件中

标签 c++ visual-studio-2010 opencl

这是 Using #include to load OpenCL code 的跟进

我注意到,当您使用 grrussel 描述的方法(并在 Bullet Physics 中使用)时,创建的字符串会删除所有换行符(注释似乎也被删除,但我不太担心) .现在在大多数情况下,如果包含的 opencl 代码中没有任何预处理器定义,这很好,但如果有,代码将无法使用 OpenCL 编译器进行编译。

有没有办法让 #include 保留换行符,或者有没有更好的方法将 opencl 代码嵌入到我的可执行文件中(除了将字符串复制到 cpp 文件中并在所有内容上加上引号)?

我在 Visual Studio 2010 中对此进行了测试,我不确定其他编译器是否表现出相同的行为。我更喜欢一种不需要任何外部工具并适用于各种编译器/平台的方法。

从其他答案复制的代码:

在 C++/C 源代码中

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"

在 OpenCL 源代码中

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);

最佳答案

我会编写一个小工具,从文本文件中生成一个带有常量字符串的 cpp,然后您可以将其与其他内容一起编译。

这就是 Qt 的资源编译器 moc 所做的(以及更多,因为它有一个完整的 API),还有 Windows 资源工具包的选项(参见下面的 this answer)。

无论如何,一个可以在目录中遍历文件并从中构建 cpp 的小型构建工具就足够了,而且您可以在 15 分钟内将它们组合在一起(如果具备合适的脚本编写技能)。

更新:根据 Henry 的评论,在 Linux(或 Msys/Cygwin)上,您可以使用 xxd使用 -i(即 xxd -i)标志,它读取一个文件并生成一个包含正确定义的确切内容的 c-include 文件。

关于c++ - 将 OpenCL 代码嵌入到可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248731/

相关文章:

opengl - 将 OpenGL draw_indirect 与 OpenCL 结合使用

clGetProgramBuildInfo 不打印构建日志

c++ - 英特尔c/c++编译器: "could not locate executable icc" (and ecc)

c++ - 在 Windows/Cygwin 中的 Netbeans 中使用 libcurl 编译代码时出现问题

visual-studio-2010 - VS2010 : Unable to start debugging Cannot locate Microsoft Internet Explorer

asp.net - 是否可以在 visual studio 解决方案中添加对网站项目的引用?

工作维度 = 2 的 clEnqueueNDRangeKernel

c++ - 在这种情况下,魔法数字可以吗?

c++ - G++ 链接到 Cygwin 中的 psapi

c# - 消息框显示没有空格?