Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+;中包含相对路径问题的OpenCL标头+; 我试图在Eclipse CTD上运行OpenCL C++示例,(在MAC上)包含OpenCL报头如下: #include <OpenCL/cl.h> #包括_C++_C_Macos_Eclipse Cdt_Opencl - Fatal编程技术网

C+;中包含相对路径问题的OpenCL标头+; 我试图在Eclipse CTD上运行OpenCL C++示例,(在MAC上)包含OpenCL报头如下: #include <OpenCL/cl.h> #包括

C+;中包含相对路径问题的OpenCL标头+; 我试图在Eclipse CTD上运行OpenCL C++示例,(在MAC上)包含OpenCL报头如下: #include <OpenCL/cl.h> #包括,c++,c,macos,eclipse-cdt,opencl,C++,C,Macos,Eclipse Cdt,Opencl,该文件存在于我的系统上(OpenCL sdk默认安装在Mac上),但不在OpenCL目录中(实际路径:/system/Library/Frameworks/OpenCL.framework/Versions/a/Headers),因此,如果我将该路径添加为项目属性中的包含目录,并从#include语句中删除相对OpenCL目录,链接显然已解析,但我注意到,在其他头文件中,引用的是相同的相对路径(例如OpenCL/cl_platform.h)但是你可以从上面的路径看到这个OpenCL目录实际上并不

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

我的问题:

在我上面的示例中,相对路径中的“OpenCL”目录是否应该实际存在于某个地方,或者应该是某种环境变量或类似的目录,指向sdk安装的实际路径

很抱歉给您带来困惑,谢谢您的帮助


<> P>注意:从KHRONOS网站看来,OpenCL目录应该是物理存在的。

< P>根据Khronos规范,有一个单独的文件充当C++的包装器,文件结尾的“.h”意味着这个头可能只针对C,并且可能是C++的“可能”。也许你可以通过阅读那一页来解决这个问题

无论如何,我发现EclipseCDT确实有问题,也许值得尝试从命令行编译,因为MacOS环境确实缺乏一个好的IDE,而且一般来说,对于开发人员来说,它不是一个好的操作系统

请记住,MAC唯一的“本地”语言是Objective-C,所有其他语言(如果存在)都在移植;如果您打算开发一些重要的项目,我建议考虑切换到Windows或Linux,因为即使Linux与Mac OSX相比,为开发者提供了更好的环境。 编辑1: 这是我发现的一个例子,它使用了我刚刚链接的Khronos页面中描述的绑定

编辑2: 你可以尝试两件事 -重新安装VGA驱动程序,这些驱动程序通常包含适合您机器的OpenCL SDK(英特尔也提供SDK,但它仅在iCore CPU和一些C2D上运行) -从命令行编译


但在这一点上,您最好的伙伴可能是Xcode和MAC下的OpenCL在线文档(注意MAC默认包括OpenCL库的1.0版本)这仅仅是因为Xcode为MAC下的此类项目提供了更好的支持,并且您可以在internet上找到许多使用此IDE的教程。

我建议您阅读苹果的文档

然而,最基本的情况是,OSX基于您编译所依据的框架解析库和头搜索路径。例如,要在Macintosh上使用OpenCL SDK编译程序,您可以这样编译:

clang -framework OpenCL main.c
这会告诉clang(或gcc,或llvm gcc,取决于您选择的编译器)在系统OpenCLSDK中搜索头(用于编译)和库(用于链接)。试一试:

// 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);
}
//使用:clang-framework OpenCL-o test.c编译我
#包括
#包括
#包括
int main(int argc,char*const argv[]{
设备数量,i;
CLGetDeviceID(NULL、CL\u设备类型\u全部、0、NULL和num\u设备);
cl_设备id*devices=calloc(sizeof(cl_设备id),num_设备);
CLGetDeviceID(NULL,CL\u设备类型\u全部,num\u设备,设备,NULL);
char-buf[128];
对于(i=0;i

注意,我在这里包含了
OpenCL/OpenCL.h
。这是用于访问Mac上CL的首选标头。如果您查看标题,您将看到它为您包括
cl.h
,以及
cl\u platform.h
。如果愿意,您可以只包含
OpenCL/cl.h
;它仍然可以正常工作。

事实上,Mac OSX Lion支持OpenCL 1.1。@James我说的是最近的Mac OSX中包含的默认版本“Mac OS X v10.6及更高版本附带OpenCL 1.0规范的本机实现”。Lion上提供的默认版本支持1.1,虽然我不确定苹果的文档是否提到了这一点。正如你所说,10.6是1.0。好吧,这样就解决了这个谜——我会试试看。如果我可以根据eclipse项目的属性针对该框架进行编译,那就太好了。作为后续问题,我问了另一个问题: