[英]Invalid conversion from void (*) (…) to void (*) (…) in OpenCL clCreateContext
我正在邁出C ++和OpenCL的第一步來執行並行計算,但是我遇到了一個試圖將監聽器函數傳遞給clCreateContext的錯誤。 我的程序(未顯示)崩潰沒有錯誤,所以我需要添加一個函數來將OpenCL錯誤轉發給stdout / stderr。 clCreateContext函數有一個函數指針的參數,可以設置為將錯誤消息轉發給stdout或stderr。 我使用Codeblocks / MinGW得到編譯時錯誤:
invalid conversion from 'void (*)(const char*, const void*, size_t, void*)' to
'void (*)(const char*, const void*, size_t, void*)'
我在下面的代碼中復制了這個問題:
#include <stdlib.h>
#include <stdio.h>
#include <CL\cl.h>
void pfn_notify(const char *errinfo, const void *private_info, size_t cb, void *user_data)
{
fprintf(stderr, "OpenCL Error (via pfn_notify): %s\n", errinfo);
}
int main()
{
/*Get platform and device info*/
cl_platform_id platform_id = NULL;
cl_uint ret_num_platforms;
cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);
cl_device_id device_id = NULL;
cl_uint ret_num_devices;
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
/*Create openCL context*/
cl_context context = clCreateContext(NULL, 1, &device_id, &pfn_notify, NULL, &ret);
/*Some line after this throws an error*/
}
我已經看到使用這個確切方法的代碼示例和pfn_notify已經有效,並且我不確定為什么我的程序甚至沒有編譯。 在此先感謝,並告訴我是否還有其他任何我可以發布的幫助。
你需要將你的函數聲明為
void CL_CALLBACK pfn_notify(.....
正如評論員指出的那樣; 如果此代碼在C ++文件中,那么它還需要:
extern "C" void CL_CALLBACK pfn_notify(.....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.