【问题标题】:Problems getting an OpenCl example to build in MSVS 2012 express. Not finding header files but paths etc...seem fine在 MSVS 2012 express 中构建 OpenCl 示例时遇到问题。没有找到头文件但路径等......似乎很好
【发布时间】:2014-09-14 23:18:24
【问题描述】:

我上个月刚开始学习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

在 VS 中的 C/C++ 中的 Additional Include Directories 下:

$(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

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

谢谢!

【问题讨论】:

  • 您可以尝试简单地创建一个新的空项目 -> 将示例源添加到项目中 -> 转到项目属性;手动将C:\Program Files (x86)\AMD APP\include 添加到其他包含目录,将C:\Program Files (x86)\AMD APP\lib\x86 添加到其他库目录(最好从 对话框)-> 将OpenCL.lib 添加到链接器输入-> 构建解决方案,看看它是否有效? :P
  • (和C:\Program Files (x86)\AMD APP\lib\x86(原文如此)而不是C:\Program Files (x86)\AMD APP\lib\x86_64,因为空项目的默认构建平台是Win32)
  • 嘿 Elmov,这种方法似乎可行。或者至少我不再有找到whatever.h的问题了。但我认为它不能正常工作,因为现在我有 46 个错误,其中大部分似乎是“错误 C2065:'上下文':未声明的标识符”。错误 C2275:“cl_program”:非法将此类型用作表达式”或错误 C2146:语法错误:缺少“;”在标识符“程序”之前
  • 啊,对。尝试从项目属性 -> C/C++ -> 高级中将Compile As 选项设置为Compile as C++ code (/TP),看看是否适合您。
  • 该示例现在可以正常工作,谢谢!我用另一个例子试了一下,做同样的事情,但给出了不同的错误;看看我能不能弄明白...谢谢你的帮助。

标签: c opencl header-files visual-studio-express


【解决方案1】:

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

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

此外,据说示例源可能使用了“ (U+201C)、” (U+201D) 甚至是 ' (U+201F) 作为引号字符形,而不是正确的“ (@987654328) @),粘贴到源码浏览器确实会出问题。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多