1

我正在尝试编译这个。我正在使用AMD SDK。我正在使用上述 SDK 附带的头文件,它们位于:

C:\Program Files (x86)\AMD APP\include\CL

该教程指出:

头文件 与 C++ 中使用的任何其他外部 API 一样,使用 OpenCL™ API 时必须包含头文件。通常,它位于主包含目录中的目录 CL 中。对于我们拥有的 C++ 绑定(用 cl.h 替换直接的 C API):

我发现最后一点有点令人困惑。我同时使用 .h 和 .hpp

#include <CL/cl.h> when this is used it will compile the checkErr function
#include <CL/cl.hpp> when this is used it gives me access to the cl namespace

当我尝试编译此代码时,它失败了:

'clUnloadCompiler': was declared deprecated

在此处输入图像描述

附加细节(删除#include <CL/ch> 后)

它现在给出以下错误列表: 在此处输入图像描述

error C4996: Error  2   error LNK2019: unresolved external symbol _clReleaseCommandQueue@4 referenced in function "public: static int __cdecl cl::detail::ReferenceHandler<struct _cl_command_queue *>::release(struct _cl_command_queue *)" (?release@?$ReferenceHandler@PAU_cl_command_queue@@@detail@cl@@SAHPAU_cl_command_queue@@@Z)    


error LNK2019: unresolved external symbol _clReleaseContext@4 referenced in function "public: static int __cdecl cl::detail::ReferenceHandler<struct _cl_context *>::release(struct _cl_context *)" (?release@?$ReferenceHandler@PAU_cl_context@@@detail@cl@@SAHPAU_cl_context@@@Z)

在我的项目的属性中,我有:

  1. 添加 C:\Program Files (x86)\AMD APP\include\ 作为附加包含目录
  2. 添加 C:\Program Files (x86)\AMD APP\lib\x86_64 作为附加库目录
  3. 添加 OpenCL.lib 作为附加依赖项

无论我是否采取最后两个步骤,都会发生我列出的错误。也就是说,最后两个似乎没有帮助或伤害任何东西

4

2 回答 2

3

这是因为clUnloadCompiler()在 OpenCL 1.2 中已弃用。

添加

#define CL_USE_DEPRECATED_OPENCL_1_1_APIS

之前的代码

#include <CL/cl.h>
#include <CL/cl.hpp>
于 2013-05-31T19:55:37.500 回答
3

我在评论中提供的答案摘要:

  1. 对于 C++ 应用程序,您只需要#include <CL/cl.hpp>
  2. 确保链接到正确的 OpenCL.lib(32 位与 64 位)。
于 2013-05-30T19:48:49.420 回答