OpenCL头包含在C++中的相对路径问题

Joh*_*dol 6 c c++ macos eclipse-cdt opencl

我试图在Eclipse CTD上运行OpenCL C++示例(在Mac上)包含OpenCL头,如下所示:

#include <OpenCL/cl.h>
Run Code Online (Sandbox Code Playgroud)

该文件存在于我的系统上(OpenCL sdk默认安装在Mac上)但不在OpenCL目录中(实际路径:) /System/Library/Frameworks/OpenCL.framework/Versions/A/Headers,因此如果我将该路径添加为项目属性中的包含目录并删除相关的OpenCL目录从#include语句来看,链接显然已经解决,我注意到在cl.h文件中,其他头文件使用相同的相对路径引用(例如OpenCL/cl_platform.h),但是你可以从上面的路径看到这个OpenCL目录实际上并不存在所以我是想知道这件事应该如何起作用.

我的问题:

在我上面的例子中,相对路径中的'OpenCL'目录是否应该存在于某个物理位置,或者它应该是某种环境变量或类似的指向sdk安装的实际路径

对不起,混乱,任何帮助表示赞赏!

注意:从khronos网站上的这篇文章来看,似乎OpenCL目录应该是物理存在的.

Jam*_*mes 8

我建议你阅读Apple的Frameworks文档.

然而,基本的故事是​​OS X根据您编译的框架解析库和头搜索路径.例如,要在Macintosh上使用OpenCL SDK编译程序,您可以这样编译:

clang -framework OpenCL main.c
Run Code Online (Sandbox Code Playgroud)

这告诉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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已OpenCL/opencl.h在此处添加.这是包含在Mac上访问CL的首选标头.如果你看一下标题,你会看到它包括cl.h你,以及cl_platform.h.OpenCL/cl.h如果你愿意,你可以包括; 它仍然可以正常工作.