我在Opencl迈出第一步时遇到了严重的麻烦,这主要是因为我的编译器拒绝承认相关库的存在。我从their website下载了最新版本的AMD SDK,并进行了完整安装。我想通过this blog学习,所以我的很多信息都来自那里。

首先,我检查了系统路径变量,它包含了amd api的64位bin文件夹。

我开始尝试使用带有标准选项-lOpenCl的make文件进行编译,但它只是告诉我找不到-lOpenCl或CL \ cl.hpp。因此,我然后添加了-I %AMDAPPSDKROOT%\include,它解决了一半的问题,但仍然(三个小时,而且还在不断增加),编译器在拒绝识别任何相关库的同时抱怨未定义的引用。

g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries -I .\Scource -I "%AMDAPPSDKROOT%\include" -L "%AMDAPPSDKROOT%\bin\x86_64" -L "%AMDAPPSDKROOT%\lib\x86_64" -LlibOpenCl.a是我现在正在使用的命令,它解决了所有问题,但未定义对clGetPlatformclReleaseCommandQueue之类的功能的引用。除了使用vector之外,我使用的代码与OpenCl blog中的第一个示例完全相同。

我尝试了很多不同的组合,并从互联网上获得了建议,但到目前为止没有任何效果。有什么我想念的/不理解的吗?我真的很想继续学习,并深表感谢。

老实说,我不知道确切的信息会有所帮助,但是如果有帮助,我将运行带有Geforce GT 635的64位Windows 7计算机,并且同时安装了CUDA和AMD SDK。

最佳答案

查看您的编译方式,似乎-LlibOpenCl.a错误。 -L用于库目录,而-l用于单个库。要使用-l,您必须删除库名前面的lib并删除点后的内容。在您的情况下,应如开头所述是-lOpenCl。

libOpenCl在这两个目录之一中吗? :
%AMDAPPSDKROOT%\ bin \ x86_64
%AMDAPPSDKROOT%\ lib \ x86_64

我想第一个用于二进制文件,第二个用于库文件,因此第一个应该没有用。由于仍未链接库,因此在链接过程中会得到未定义的引用。

10-04 23:17