你好,我在构建和安装 pyrit cpyrit-cuda 和 cpyrit opencl 时遇到了问题,这是我尝试构建和运行安装程序时得到的结果。
brandon@sanfran-Dell-System-Inspiron-N7110:~/cpyrit-opencl-0.4.0$ sudo python setup.py install
svn: '.' is not a working copy
running install
running build
running build_ext
Building modules...
building 'cpyrit._cpyrit_opencl' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/local/cuda/include -I/usr/include/python2.7 -c _cpyrit_opencl.c -o build/temp.linux-x86_64-2.7/_cpyrit_opencl.o -Wall -fno-strict-aliasing -DVERSION="0.4.0"
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/_cpyrit_opencl.o -lcrypto -lz -lOpenCL -o build/lib.linux-x86_64-2.7/cpyrit/_cpyrit_opencl.so
/usr/bin/ld: cannot find -lOpenCL
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
brandon@sanfran-Dell-System-Inspiron-N7110:~/cpyrit-opencl-0.4.0$ f
如果可能的话,请有人帮忙,所有的回复都非常感谢!!
答案1
你收到的错误消息是说找不到 OpenCL 库。对于 Ubuntu 来说,它可能没有安装在你的系统上应该将 OpenCL 库的链接放在默认库文件夹 /usr/lib 中。
为了安装 OpenCL,请为您的系统安装专有显卡驱动程序。工具“附加驱动程序”(程序名称:jockey)应该可以帮助您找到合适的软件包,但您也可以手动安装它们。如果您有 nVidia 显卡,这可能是软件包 nvidia-current 或 nvidia-current-updates(甚至更新版本)。如果您有 AMD 显卡,请安装 fglrx 或 fglrx-updates。不要使用 *-experimental 软件包,因为这些软件包(至少对于 AMD 而言)不包含 OpenCL 功能。
您可能还需要安装 opencl-headers 包。在 nvidia 上,有一个名为 nvidia-opencl-dev 的元包可用,它应该安装开始使用 OpenCL 所需的一切。
如果你确定安装了 OpenCL,但仍无法运行它,请找出 libOpenCL.so 文件所在的位置。只需运行
locate libOpenCL.so
这应该会为您提供一个安装在您的 PC 上的同名文件列表。在我的例子中,有一个链接“/usr/lib/libOpenCL.so”,指向文件本身,即“/usr/lib/fglrx/libOpenCL.so”。这意味着在我的例子中,文件夹将是 /usr/lib 或 /usr/lib/fglrx。一旦您知道文件夹名称,您就可以再次运行安装命令,但要设置 LD_FLAGS。我不知道 sudo 如何对设置变量做出反应,所以我会运行一个交互式 root shell 并在其中设置 LD_FLAGS:
sudo -i
LD_FLAGS="--library-path=<folder the lib is in>" python setup.py install
exit
如果(出于某些奇怪的原因,例如如果您没有使用 Ubuntus 图形驱动程序包)您的 OpenCL lib 未安装在默认位置(意思是:不在 /usr/lib、/usr/local/lib 或 /lib 中),并且在其中一个文件夹中也没有指向它的符号链接,我要么手动放置一个符号链接(肮脏但简单的黑客),要么编写一个包含 lib 所在文件夹的文件并将其放入 /etc/ld.so.conf.d/(查看那里的其他文件以了解我的意思并检查它是否还不存在)并运行“sudo ldconfig”,以便您的程序找到它。/etc/ld.so.conf.d 中的文件中列出的文件夹是目录列表,ldconfig 会在这些目录中搜索动态库,进而生成程序用来搜索共享库的索引。否则,每次运行编译的 OpenCL 应用程序时,您可能都必须设置 LD_LIBRARY_PATH...