2015-12-21 108 views
0

我在开始使用Opencl时非常麻烦,主要是因为我的编译器拒绝识别相关库的存在。我从their website下载了最新版本的AMD SDK,并进行了完整安装。我想通过this blog来学习,我的大部分信息都是从那里得到的。麻烦连接AMD SDK opencl

首先,我检查了我的系统路径变量,它包含了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。我使用与OpenCl blog中的第一个示例完全相同的代码,除了我还包含vector

我已经尝试了不同的组合加载,并从互联网的建议,但没有任何工作到目前为止。有什么我失踪/不明白?我真的很想继续学习,并非常感谢任何帮助。老实说,我不确切知道哪些信息会有帮助,但是如果这有助于我使用Geforce GT 635运行64位Windows 7计算机,并且我已经安装了CUDA和AMD SDK。

+0

我可能有一个解决方案,我要休息一下,虽然 – user4578093

回答

3

看着你如何编译它似乎-LlibOpenCl.a是错误的。 -L用于库目录,而-l用于单个库。要使用-l,必须删除库名称前面的lib,并删除点后面的内容。就你的情况而言,它应该是-lOpenCl,正如你在开始时所说的那样。

libOpenCl在这两个目录之一中? : %AMDAPPSDKROOT%\ BIN \ x86_64的 %AMDAPPSDKROOT%\ LIB \ x86_64的

我想第一个是二进制和他第二个用于库,以便第一个应该是无用的。由于您尚未链接库,因此您在链接期间获取未定义的引用。

+0

几个不同的消息人士称,这是要走的路,但该文件的名称被改变了好像巫术给我,所以我选择只是写出我的编译完整的文件名。感谢你明确地说明了这一点,但是当我在寻找答案时,我看到了类似的东西,但从来没有说过,lib必须从名称中删除,所以我忽略了它。 – user4578093

0
g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries 
-I .\Scource -I "%AMDAPPSDKROOT%\include" "%AMDAPPSDKROOT%\lib\x86\libOpenCl.a" 

​​通过指定完整的文件路径,并包括相同的语义文件就好像它是一个对象文件我得到了我的项目编译,我还使用了库的32位版本,而不是64的bit版本。