/ usr / bin / ld: не удается найти -lOpenCL

10

В настоящее время пытаюсь скомпилировать простую программу, приведенную в 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

Теперь я установил, используя инструкции с этого сайта. Тем не менее, я все еще получаю ошибку выше.

Как я могу решить эту ошибку?

Шаран Дуггирала
источник

Ответы:

14

Ваш компоновщик не может найти 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
Ярон
источник
1
Это сработало для меня! Самый первый ответ. Спасибо!
Шаран Дуггирала
3

Как уже сказал Ярон, компоновщик не знает, где найти библиотеку 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вы можете просто изменить команду компилятора / компоновщика следующим образом. В противном случае вам придется прикоснуться к вашей системе сборки, как ее включить.

mbeyss
источник
или попробуйте, LDFLAGSнапример,make 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
Steeldriver
Если вы ищете чисто временное решение, это тоже поможет. Однако я советую сделать это, LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/чтобы сохранить все предыдущие настройки
mbeyss