链接 AMD SDK opencl 时出现问题

Trouble linking AMD SDK opencl

我在 Opencl 中迈出第一步时遇到了严重的问题,主要是因为我的编译器拒绝识别相关库的存在。我从 their website and went with the full install. I'm wanting to learn through this blog 下载了最新版本的 AMD SDK,所以我的大部分信息都来自那里。

首先,我检查了我的系统路径变量,它包含 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.

我已经尝试了很多不同的组合,并尝试了来自互联网的建议,但到目前为止没有任何效果。有什么我想念/不明白的吗?我真的很想继续学习,非常感谢任何帮助。

老实说,我不知道哪些信息会有帮助,但如果有帮助的话,我是 运行 64 位 windows 7 计算机,配备 Geforce GT 635,我两者都有安装了 CUDA 和 AMD SDK。

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

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

我想第一个是二进制文件,第二个是库,所以第一个应该没用。您在链接期间获得未定义的引用,因为您仍然没有链接库。

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

%AMDAPPSDKROOT%\lib\x86\libOpenCl.a 通过指定完整的文件路径并包含具有相同语义的文件,就好像它是我的项目要编译的目标文件一样,我还使用了 32 位版本的库而不是64 位版本。