В настоящее время пытаюсь скомпилировать простую программу, заданную в OpenCL изэтотвеб-сайт. Он даст мне требуемое, DeviceInfo
что мне нужно. После простого вызова make
, я получаю ошибку ниже:
sharan@sharan-X550CC:~/opencl-ex/Ex1$ make
g++ DeviceInfo.cpp -I ../../Cpp_common -lOpenCL -o DeviceInfo
/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
Makefile:23: recipe for target 'DeviceInfo' failed
make: *** [DeviceInfo] Error 1
Сейчас я установил, используя инструкцию отэтотвеб-сайт. Однако я все еще получаю указанную выше ошибку.
Как устранить эту ошибку?
решение1
Ваш компоновщик не может найти OpenCL
библиотеку.
Вы должны помочь компоновщику найти OpenCL
библиотеку.
Похожий вопрос был поднятздесь
Решением было создать ссылку на библиотеку в известном месте ее расположения:
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so
Другой вариант:
Предполагая, что OpenCL
библиотека расположена в , /usr/lib/x86_64-linux-gnu/
вы также можете добавить папку библиотеки в путь к библиотекам:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"
Возможно, вам придется обновить «Dynamic Linker»:
sudo ldconfig
решение2
Как уже сказал Ярон, компоновщик не знает, где найти библиотеку OpenCL, т.е. ее нет ни в одном из мест, где он ее ищет.
Вместо того, чтобы перемещать его в одно из этих мест (например, /usr/lib
), я бы предложил сообщить компоновщику, где его искать, с помощью флага -L
. Тогда команда будет выглядеть так (обратите внимание на -L/usr/lib/x86_64-linux-gnu
)
g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo
Если вы используете рукописный, Makefile
вы можете просто изменить команду компилятора/линкера, как здесь. В противном случае вам придется трогать вашу систему сборки, чтобы включить ее.