cl_program prog_cl;;cl_program pprogram_head;std::ifstream srcFile("kernel.cl");string srcProg(istreambuf_iterator<char>(srcFile), (istreambuf_iterator<char>()));const char* src = srcProg.c_str();size_t src_length = srcProg.length();prog_cl = clCreateProgramWithSource(context, 1, (const char**)&src,&src_length, &err);err = clCompileProgram(prog_cl, 1, &device, NULL, 0, NULL, NULL, NULL, NULL);std::cout << " clCompileProgram1: " << err;;char* programBinary = new char[1024];FILE* pf;size_t programBinarySize;clGetProgramInfo(prog_cl, CL_PROGRAM_BINARY_SIZES, sizeof(cl_device_id), &programBinarySize, NULL); programBinary = ( char*)malloc(sizeof(unsigned char) * programBinarySize);clGetProgramInfo(prog_cl, CL_PROGRAM_BINARIES, sizeof(unsigned char*), &programBinary, NULL); fopen_s(&pf, "vec.bin", "w");fwrite(programBinary, 1, programBinarySize, pf);free(programBinary);fclose(pf);programBinarySize = readSource("vec.bin", &programBinary);cl_program prog[2];prog[0] = clCreateProgramWithBinary(context, 1, &device, &programBinarySize, (const unsigned char**)&programBinary, NULL, &err);std::cout << "clCreateProgramWithBinary" << err << std::endl;err = clCompileProgram(prog[0], 1, &device, NULL, 0, NULL, NULL, NULL, NULL);std::ifstream srcFile_head("add.cl");string srcProg_head(istreambuf_iterator<char>(srcFile_head), (istreambuf_iterator<char>()));const char* src_head = srcProg_head.c_str();size_t src_length_head = srcProg_head.length();prog[1] = clCreateProgramWithSource(context, 1, &src_head, &src_length_head, &err);err = clCompileProgram(prog[1], 1, &device,NULL, 0, NULL, NULL, NULL, NULL);std::cout << "clCompileProgramn3" << err;cl_program program = clLinkProgram(context, 1, &device, NULL, 2, prog, NULL, NULL, &err);
I always get cllinkprogram error.what is the right way to do this?I want compile a binary form disk.And Separate Compilation and Linking with clCompileProgram and clLinkProgram