我已經在.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