我正在尝试在Eclipse CTD上运行OpenCL C ++示例(在Mac上)包含OpenCL标头,如下所示:
#include <OpenCL/cl.h>
该文件存在于我的系统上(OpenCL sdk默认安装在Mac上)但不在OpenCL目录中(实际路径:/System/Library/Frameworks/OpenCL.framework/Versions/A/Headers
),因此如果我将该路径添加为属性中的包含目录项目并从#include
语句中删除相关的OpenCL目录,显然已解决链接但我注意到that cl.h file其他头文件使用相同的相对路径引用(ex 。OpenCL/cl_platform.h
)但你可以从上面的路径看到这个 OpenCL 目录实际上并不存在,所以我想知道这个东西应该如何起作用。
我的问题:
在我上面的例子中,是相对路径中的'OpenCL'目录,应该在物理上某处存在,或者它应该是某种环境变量或类似的,指向sdk安装在的实际路径中
对于这种困惑感到抱歉,感谢任何帮助!
注意:从khronos网站上的this article开始,OpenCL目录似乎应该存在。
答案 0 :(得分:8)
我建议你阅读关于Frameworks的Apple文档。
然而,基本的故事是OS X根据您编译的框架解析库和头搜索路径。例如,要在Macintosh上使用OpenCL SDK编译程序,您可以这样编译:
clang -framework OpenCL main.c
这告诉clang(或gcc,或llvm-gcc,取决于您选择的编译器)在System OpenCL SDK中搜索标题(用于编译)和库(用于链接)。试一试:
// compile me with: clang -framework OpenCL -o test test.c
#include <stdio.h>
#include <stdlib.h>
#include <OpenCL/opencl.h>
int main(int argc, char* const argv[]) {
cl_uint num_devices, i;
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
cl_device_id* devices = calloc(sizeof(cl_device_id), num_devices);
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL);
char buf[128];
for (i = 0; i < num_devices; i++) {
clGetDeviceInfo(devices[i], CL_DEVICE_NAME, 128, buf, NULL);
fprintf(stdout, "Device %s supports ", buf);
clGetDeviceInfo(devices[i], CL_DEVICE_VERSION, 128, buf, NULL);
fprintf(stdout, "%s\n", buf);
}
free(devices);
}
请注意,我在此处添加了OpenCL/opencl.h
。这是包含在Mac上访问CL的首选标头。如果您查看标题,就会看到它包含cl.h
以及cl_platform.h
。如果您愿意,可以包含OpenCL/cl.h
;它仍然可以正常工作。
答案 1 :(得分:2)
根据Khronos规范link to K,有一个单独的文件充当C ++的包装器,文件末尾的“.h”意味着这个头可能仅用于C和“也许“对于C ++。也许你可以解决这个阅读页面。
无论如何,我发现Eclipse CDT真的很麻烦,也许值得尝试从命令行编译,因为MAC OS环境真的缺乏一个好的IDE,并且一般来说它对开发人员来说不是一个好的操作系统。
请记住,MAC的唯一“本机”语言是Objective-C,所有其他语言(如果存在)都在移植;如果您计划开发一些重要的项目,我建议考虑转换到Windows或Linux,因为即使Linux为开发人员提供了比MAC OSX更好的环境。
编辑1: 这是我发现的一个例子,它使用我刚刚链接的Khronos页面中描述的绑定link 2 example
编辑2: 你可以试试2件事 - 重新安装通常包含适合您机器的OpenCL SDK的VGA驱动程序(英特尔还提供SDK,但它仅在iCore CPU和某些C2D上运行) - 从命令行编译
但此时你最好的同伴可能是Xcode和MAC link下OpenCL的在线文档(注意MAC默认包含OpenCL库的1.0版本),因为Xcode为此提供了更好的支持在MAC下的一个项目,你可以使用这个IDE在互联网上找到很多教程。