C++ clGetProgramBuildInfo是否返回空字符串?

C++ clGetProgramBuildInfo是否返回空字符串?,c++,opencl,C++,Opencl,我正在尝试调试代码,但带有CL_PROGRAM_BUILD_LOG参数的方法clGetProgramBuildInfo返回空字符串,这是代码: cl_int err; cl_uint num_platforms; err = clGetPlatformIDs(0, NULL, &num_platforms); cl_platform_id platform[num_platforms]; err = clGetPlatformIDs(num_platforms, platform, NU

我正在尝试调试代码,但带有CL_PROGRAM_BUILD_LOG参数的方法clGetProgramBuildInfo返回空字符串,这是代码:

cl_int err;
cl_uint num_platforms;
err = clGetPlatformIDs(0, NULL, &num_platforms);
cl_platform_id platform[num_platforms];
err = clGetPlatformIDs(num_platforms, platform, NULL);
cl_uint num_devices;
err = clGetDeviceIDs(platform[0], CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);

cl_device_id device[num_devices];
err = clGetDeviceIDs(platform[0], CL_DEVICE_TYPE_ALL, num_devices, device, NULL);

cl_context context = clCreateContext(0, 1, device, NULL, NULL, &err);

string cl_str = util::loadProgram("vadd.cl");
const char * c = cl_str.c_str();
cl_program program = clCreateProgramWithSource (    context,
                                                    1,
                                                    (const char **) &c,
                                                    NULL,
                                                    NULL);

err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);

cl_char string[10240] = {0};
char* param_value;
clGetProgramBuildInfo (    program,
                           device[1],
                           CL_PROGRAM_BUILD_LOG,
                           10240,
                           string,
                           NULL);
cout << string << endl;
cl_int err;
cl_uint num_平台;
err=clGetPlatformIDs(0、NULL和num_平台);
cl_平台id平台[num_平台];
err=clGetPlatformIDs(num_platforms,platform,NULL);
设备数量;
err=CLGetDeviceID(平台[0],CL\u设备类型\u全部,0,NULL和num\u设备);
cl_设备_id设备[num_设备];
err=CLGetDeviceID(平台[0],CL\u设备类型\u全部,num\u设备,设备,NULL);
cl_context context=clCreateContext(0、1、设备、NULL、NULL和err);
字符串cl_str=util::loadProgram(“vadd.cl”);
const char*c=cl_str.c_str();
cl_program=clCreateProgramWithSource(上下文,
1.
(const char**)和c,
无效的
无效);
err=clBuildProgram(程序,0,NULL,NULL,NULL);
cl_字符串[10240]={0};
字符*参数值;
clGetProgramBuildInfo(程序,
设备[1],
CL_程序构建日志,
10240,
一串
无效);

因为这个调用返回的是一个数字而不是字符串,所以不能吗?我编辑了问题CL_程序构建日志,很抱歉你告诉clGetProgramBuildInfo你的缓冲区是0字节长。您对它返回0字节感到惊讶吗?另外,您没有调用clBuildProgram,因此没有生成信息。好的,因此我应该调用该方法两次,从上一个参数获取大小,将第4个和第5个参数设置为null,然后再次调用具有刚获得的参数的方法?