Я пытаюсь скомпилировать программу, которая использует OpenCL и CUDA и GPU. Я попытался установить драйверы Nvidia, CUDA, cuDNN, GCC и OpenCL на моей машине GTX 1070 Ubuntu 16.10 и, по большей части, вещи, кажется, работают. Однако я все еще не уверен в том, как создать OpenCL, таким образом, что я могу скомпилировать программу.
Сразу, я пытаюсь скомпилировать oclvanitygen
, который является программой OpenCL для генерации кошельков биткоина. Я сталкиваюсь с трудностями, когда я пытаюсь скомпилировать его.
>git clone https://github.com/samr7/vanitygen.git
>cd vanitygen
>gcc -o oclvanitygen oclvanitygen.c -lOpenCL
/tmp/ccPaWgka.o: In function `main':
oclvanitygen.c:(.text+0x50c): undefined reference to `vg_exec_context_new_key'
oclvanitygen.c:(.text+0x529): undefined reference to `EC_KEY_get0_group'
oclvanitygen.c:(.text+0x53e): undefined reference to `EC_POINT_hex2point'
oclvanitygen.c:(.text+0x554): undefined reference to `EC_KEY_free'
oclvanitygen.c:(.text+0x815): undefined reference to `RAND_load_file'
oclvanitygen.c:(.text+0x894): undefined reference to `vg_regex_context_new'
oclvanitygen.c:(.text+0x8b8): undefined reference to `vg_prefix_context_new'
oclvanitygen.c:(.text+0x935): undefined reference to `vg_output_match_console'
oclvanitygen.c:(.text+0x947): undefined reference to `vg_output_timing_console'
oclvanitygen.c:(.text+0x9d4): undefined reference to `vg_context_add_patterns'
oclvanitygen.c:(.text+0xa28): undefined reference to `vg_read_file'
oclvanitygen.c:(.text+0xa9c): undefined reference to `vg_prefix_context_set_case_insensitive'
oclvanitygen.c:(.text+0xabb): undefined reference to `vg_context_add_patterns'
oclvanitygen.c:(.text+0xb37): undefined reference to `vg_read_password'
oclvanitygen.c:(.text+0xb86): undefined reference to `vg_check_password_complexity'
oclvanitygen.c:(.text+0xc33): undefined reference to `vg_ocl_context_new_from_devstr'
oclvanitygen.c:(.text+0xcdc): undefined reference to `vg_ocl_context_new'
oclvanitygen.c:(.text+0xd06): undefined reference to `vg_ocl_enumerate_devices'
oclvanitygen.c:(.text+0xd1c): undefined reference to `vg_context_start_threads'
oclvanitygen.c:(.text+0xd41): undefined reference to `vg_context_wait_for_completion'
oclvanitygen.c:(.text+0xd50): undefined reference to `vg_ocl_context_free'
collect2: error: ld returned 1 exit status
Что, вероятно, идет не так, как надо и как я могу зафиксировать его?
Определенные детали того, как я настроил систему, упоминаются ниже. Я предполагаю, что существуют некоторые шаги, которые я сделал неправильно относительно разрешения компилятору иметь доступ к какой это потребности OpenCL.
Я установил драйверы Nvidia.
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install \
nvidia-367 \
nvidia-prime \
nvidia-modprobe \
nvidia-opencl-dev
Я установил CUDA.
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
Это установило CUDA в каталоге /usr/local/cuda-8.0
. Я включал каталог /usr/local/cuda-8.0/bin
в переменной окружения PATH.
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
Я установил cuDNN.
tar -xvf cudnn-8.0-linux-x64-v5.1.tgz
Архив cuDNN содержит следующее:
cuda/include/cudnn.h
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.5
cuda/lib64/libcudnn.so.5.1.10
cuda/lib64/libcudnn_static.a
Я скопировал некоторые из этих файлов к другим каталогам, потому что Интернет сказал мне.
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
sudo cp cuda/lib64/* /usr/local/cuda-8.0/lib64/
Я установил и изменился на GCC 4.9 для CUDA.
sudo apt-get install gcc-4.9 g++-4.9
ln -fs /usr/bin/gcc-4.9 /usr/bin/gcc
ln -fs /usr/bin/g++-4.9 /usr/bin/g++
OpenCL включен с CUDA. Я создал символьную ссылку на заголовки Nvidia OpenCL в каталоге /usr/include
.
sudo ln -s /usr/include/nvidia-375/CL /usr/include
Я связался со скомпилированным файлом библиотеки OpenCL также:
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/local/lib/libOpenCL.so
Ваша проблема, кажется, не с OpenCL или CUDA, но находится вместо этого в способе, которым Вы разрабатываете этот конкретный проект.
Создавать oclvanitygen
, попытка, вместо этого работающая make oclvanitygen
, или создавать его вручную:
gcc -o oclvanitygen oclvanitygen.c oclengine.c pattern.c util.c -lpcre -lcrypto -lm -pthread -lOpenCL
Неопределенные ссылки перечислены по Вашей ошибке сборки, такой как vg_exec_context_new_key
, из файлов в самом vanitygen проекте, не OpenCL, таким образом добавляя, что эти файлы к сборке фиксируют его.