c++中包含相对路径的OpenCL头文件问题
OpenCL header inclusion with relative path issue in C++
我正在尝试在Eclipse CTD上运行一个OpenCL c++示例,(在Mac上)包含如下OpenCL头文件:
#include <OpenCL/cl.h>
该文件存在于我的系统(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目录应该是实际存在的。
我建议你阅读苹果关于框架的文档。
基本的故事,然而,是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, "%sn", buf);
}
free(devices);
}
注意,我在这里包括了OpenCL/opencl.h
。这是在Mac上访问CL的首选头文件。如果您查看头文件,您将看到它为您包括cl.h
和cl_platform.h
。如果你愿意,你可以只包括OpenCL/cl.h
;
根据Khronos规范链接到K,有一个单独的文件作为c++的包装器,文件末尾的".h"也意味着这个头文件可能只适用于C,而"maybe"适用于c++。也许你读那一页就能解决这个问题。
无论如何,我发现Eclipse CDT确实有很多bug,也许值得尝试从命令行编译,因为MAC OS环境确实缺乏一个好的IDE,总的来说,对于开发人员来说它不是一个好的操作系统。
请记住,MAC的唯一"本地"语言是Objective-C,所有其他语言,如果存在,都是移植的;如果你计划开发一些重要的项目,我建议你考虑切换到Windows或Linux,因为与MAC OSX相比,Linux为开发人员提供了更好的环境。
编辑1:这是我发现的一个例子,它使用了我刚刚链接的Khronos页面中描述的绑定link 2 example
编辑2:你可以尝试两件事-重新安装VGA驱动程序,通常包含适合您机器的OpenCL SDK(英特尔也提供SDK,但它仅在iCore CPU和一些C2D上运行)-从命令行编译
但是在这一点上,你最好的伙伴可能是Xcode和MAC链接下的OpenCL在线文档(注意MAC默认包含1.0版本的OpenCL库),因为Xcode为MAC下的这类项目提供了更好的支持,你可以在互联网上找到很多使用这个IDE的教程。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- CMake OpenCL:无法读取内核文件
- 英特尔 OpenCL SDK - 头文件在哪里
- AMD OpenCL 致命错误:CL/cl.hpp:没有这样的文件或目录
- 使用OpenCL 2.0 c++绑定头文件的链接器错误
- c++中包含相对路径的OpenCL头文件问题
- Opencl内核文件没有完全加载
- 没有外部内核文件的openCL
- 使用nvcc的可执行程序比使用gcc/g++和OpenCL的可执行文件大
- 编译 OpenCL 文件时LNK2019许多错误
- 包括 OpenCL .cl 文件的标头
- 如何将OpenCL内核文件(.cl)编译为llvm IR文件
- 如果从二进制文件加载,OpenCL将导致CL_INVALID_COMMAND_QUEUE