我試圖編譯代碼在這裏找到:http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-resources/introductory-tutorial-to-opencl/「__kernel」沒有指定類型
我用命令編譯它:
g++ -Wall -O2 -lm -lOpenCL -g -Wno-unknown-pragmas foo.cpp -o foo
導致問題的代碼的部分是這樣的:
#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable
__constant char hw[] = "Hello World\n";
__kernel void hello(__global char * out) {
size_t tid = get_global_id(0);
out[tid] = hw[tid];
}
我收到以下錯誤:
foo.cpp:105:2: error: ‘__constant’ does not name a type
__constant char hw[] = "Hello World\n";
foo.cpp:107:2: error: ‘__kernel’ does not name a type
__kernel void hello(__global char * out) {
有人可以解釋爲什麼會發生這種情況嗎?標題與鏈接完全相同。
感謝
看起來您正嘗試將OpenCL代碼編譯爲本機代碼(以在您的CPU上運行)。據我所知,gcc不認可opencl作爲一種語言。你需要一個opencl編譯器來編譯代碼。 Clang的確瞭解opencl,但如果沒有運行時庫的形式進一步支持,您仍然無法將其編譯爲本機應用程序。使用OpenCL的正常方式是使用clCreateProgramFromSource(),clBuildProgram(),clCreateKernel()和clEnqueueNDRange()[在一些樣板之前/之後] – 2015-04-05 07:53:05
@MatsPetersson是正確的(並且應該將其作爲答案提交) – Dithermaster 2015-04-05 15:16:42
我不是嘗試使用GCC編譯鏈接建議。我正在使用g ++和-lOpenCl,它應該工作,這就是爲什麼我很困惑......其他opencl函數調用都發現它只是內核方法的聲明是一個問題 – theNoobProgrammer 2015-04-05 15:40:33