我已经在.cl
文件中编写了OpenCL内核。它试图#include
几个标题。包含头文件到OpenCL .cl文件
其编译失败,因为包含的头文件是“未找到”。 我知道clBuildProgram
可以采取-I dir
选项,它将目录dir
添加到要搜索的头文件的目录列表。
在khronus网站论坛中,这篇文章http://www.khronos.org/message_boards/viewtopic.php?f=37&t=2535谈到了这个问题。
他们建议使用clCreateProgramWithSource
它指定所有源(包括.h文件)。
我有一个关于这个问题一个问题:
- 哪种选择更好? (
clBuildProgram
与clCreateProgramWithSource
,如上所述) - 如果我使用
clCreateProgramWithSource
编译器如何知道要包含什么?我的意思是,哪个来源代表哪个包含文件名? - 如果我使用
clBuildProgram
并且有几个包含文件的目录,我该如何指定它们?
AMD APP与-I问题也从我的经验(它根本不工作),但英特尔处理它完美。 – Thomas
这很有趣。我虽然我在CPU上测试过它。我没有AMD GPU,所以我无法在GPU上进行测试。也许这是一个GPU与CPU的问题? – 2013-03-10 07:18:53
不,我在Windows下的两个设备下试过,编译器似乎并不处理相对包含路径。基本上,我的编译器命令行中有“-I cl /”,我的内核整齐排列在cl /目录下,虽然在Intel/Linux下工作正常,但AMD不会有任何问题,无论如何我尝试的是,我发现的唯一解决方案是在#include指令中对每个.cl文件的*绝对路径*进行硬编码,或将我的cl /文件夹添加到系统$ PATH。这可能是我的安装,但是我的Linux系统并没有像我的Linux系统那样维护。 – Thomas