【发布时间】:2013-12-17 09:53:18
【问题描述】:
我在我的笔记本电脑上安装了 Kubuntu 13.10,它有一个 Nvidia GT555m 和 optimus 技术。我在使用 OpenCL 编译 C++ 代码时遇到了一些问题。
我不断收到的错误是Cannot find -lOpenCL。使用 GNU find 实用程序进行快速搜索会得到以下信息:
/usr/lib32/nvidia-319/libOpenCL.so.1
/usr/lib32/nvidia-319/libOpenCL.so
/usr/lib32/nvidia-319/libOpenCL.so.1.0
/usr/lib32/nvidia-319/libOpenCL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libOpenCL.so
/usr/lib/nvidia-319/libOpenCL.so.1
/usr/lib/nvidia-319/libOpenCL.so
/usr/lib/nvidia-319/libOpenCL.so.1.0
/usr/lib/nvidia-319/libOpenCL.so.1.0.0
我安装了以下 OpenCL 开发包:
opencl-headers
nvidia-opencl-dev
我还尝试了实用程序clinfo 来查看是否获得任何信息,但我收到以下错误:
clinfo: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory
有没有人有在他们的 Optimus 笔记本电脑上使用 OpenCL 设置 Linux 开发环境的经验?
我的印象是我不需要做任何花哨的事情就可以让它工作。
编辑:好吧,看来我无法编译的原因是因为我混淆了头文件和库。使用以下代码可以很好地编译我的代码:
g++ -std=c++11 -I /usr/local/cuda-5.5/include vadd.cpp -L /usr/lib/nvidia-331 -lOpenCL
我现在在运行时遇到另一个错误(但至少我设法编译了!)。错误如下:
ERROR: clGetPlatformIDs
-1001
通过一些研究,这意味着我可能没有安装 nvidias 工具包的 ICD 部分?我无法理解的是 - 在哪里可以找到它!
【问题讨论】:
-
您是否尝试添加链接目录的路径:
-L/usr/lib32/nvidia-319/? -
是的,我做到了,它有点工作,但编译不好。我无法理解的是我应该选择哪个版本的库。我安装的 libopencl-dev 软件包将 libOpenCL.so 文件放在 /usr/lib/x86_64-linux-gnu 中,并将相应的头文件放在 /usr/include 中。但是,如果我尝试将它添加到我的库路径中,它只会抱怨它找不到 lOpenCL! nvidia-319 路径中的那个似乎不想在我添加一些基本命令后立即为我编译,但至少它不会抱怨它找不到 lOpenCL :/