/usr/bin/ld: не удается найти -lOpenCL
В настоящее время пытаюсь скомпилировать простую программу, приведенную в 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
Теперь я установил, используя инструкции с этого сайта. Тем не менее, я все еще получаю ошибку выше.
Как я могу решить эту ошибку?
2 ответа
Ваш линкер не может найти OpenCL
библиотека.
Вы должны помочь компоновщику найти OpenCL
библиотека.
Подобная проблема была поднята здесь
Решением было сделать ссылку на библиотеку в известном месте lib:
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/"
Вам может потребоваться обновить "Динамический компоновщик":
sudo ldconfig
Как уже сказал Ярон, компоновщик не знает, где найти библиотеку 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
Вы можете просто изменить команду компилятора / компоновщика следующим образом. В противном случае вам придется прикоснуться к вашей системе сборки, как ее включить.