0

我上个月刚开始学习C,这周我刚刚安装了Microsoft Visual Studio Express 2012;连同 AMD OpenCl SDK。我已经按照安装指南进行了搜索,一切似乎都已正确设置,但我仍然无法构建这个 OpenCl 示例。

我试图在我从 AMD 下载的 OpenCL Programming guide book 中运行一个示例。我一直遇到的问题是它似乎无法找到 OpenCl 头文件。

"Error C1083: Cannot open include file: 'CL/cl_platform.h': No such file or directory 
c:\program files (x86)\amd app\include\cl\cl.h"

我检查了目录以确保,是的​​,文件在那里。

对于包含我有:#include<C:\Program Files (x86)\AMD APP\include\CL\cl.h

我已经尝试过了: #include <Cl\cl.h>#include <Cl/cl.h>

VS 似乎唯一一次找到它是使用完整路径,或者是: #include <cl.h>

否则我得到: "Error C1083: Cannot open include file: 'CL\cl.h': No such file or directory"

这是我对环境路径变量的看法:

AMDAPPSDKROOT     C:\Program Files (x86)\AMD APP

Path              C:\Program Files (x86)\AMD APP\bin\x86_64

在附加包含目录下的 C/C++ 中的 VS 中:

$(AMDAPPSDKROOT)\include

在链接器附加库目录下:

$(AMDAPPSDKROOT)\lib\x86_64

在作为附加依赖项的输入下

OpenCL.lib

这是 C/C++ 的命令行输出:

/MP /GS /TC /Qpar /analyze /Wall /Gy /Zc:wchar_t /I"C:\Program Files (x86)\AMD APP\include" /ZI /Gm /Od /Fd"Debug\vc110.pdb" /fp:precise /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /GR /Gd /Oy- /MDd /openmp /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Ot /Fp"Debug\OpenClPractice.pch"

和链接器:

/OUT:"D:\Python\C\OpenClPractice\Debug\OpenClPractice.exe" /MANIFEST /NXCOMPAT /PDB:"D:\Python\C\OpenClPractice\Debug\OpenClPractice.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" "OpenCL.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"D:\Python\C\OpenClPractice\Debug\OpenClPractice.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\OpenClPractice.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:\Program Files (x86)\AMD APP\lib\x86_64" /TLBID:1

在我看来一切都很好,但显然不是,否则我不会遇到这个问题。如果有人可以提供帮助,那就太好了。

谢谢!

4

1 回答 1

1

提供对评论的讨论汇总;看来问题是通过简单地创建一个新的、干净的项目、通过项目属性对话框手动添加相关目录和链接器输入(没有任何环境变量扩展)来解决的。

至于原来的问题..我真的不知道。命令行 argstring 中唯一可能导致直接问题的是/TC(编译为 C89 代码)开关,它是由 Visual Studio 根据输入源文件扩展名自动“推断”出来的(很可能.c在这种情况下)。替换/TC/TP(编译为 C++ 代码)应该可以。

此外,据说示例源可能使用了“ ( U+201C)、” ( U+201D) 甚至是 ' ( U+201F) 作为引号字形,而不是正确的 " ( U+0022),这在粘贴到源浏览器时确实会造成麻烦。

于 2013-08-21T08:59:23.530 回答