/ usr / bin / ld: no se puede encontrar -lOpenCL

10

Actualmente estoy tratando de compilar un programa simple dado en OpenCL desde este sitio web. Me dará lo requerido DeviceInfoque necesito. Después de simplemente invocar a make, obtengo el siguiente error:

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

Ahora lo he instalado usando las instrucciones de este sitio web. Sin embargo, sigo recibiendo el error anterior.

¿Cómo puedo resolver este error?

Sharan Duggirala
fuente

Respuestas:

14

Tu enlazador no puede encontrar la OpenCLbiblioteca.

Debes ayudar al vinculador a encontrar la OpenCLbiblioteca.

Se planteó un problema similar aquí

La solución fue hacer un enlace para la biblioteca a una ubicación de lib conocida:

sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so

Otra opción:

Suponiendo que la OpenCLbiblioteca ubicada en /usr/lib/x86_64-linux-gnu/usted también puede agregar la carpeta de la biblioteca a la ruta de Bibliotecas:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"

Es posible que deba actualizar el "Dynamic Linker":

sudo ldconfig
Yaron
fuente
1
¡Esto funcionó para mí! La primera respuesta. ¡Gracias!
Sharan Duggirala
3

Como ya dijo Yaron, el enlazador no sabe dónde encontrar la biblioteca OpenCL, es decir, no está en ninguno de los lugares donde la busca.

En lugar de moverlo a uno de esos lugares (por ejemplo /usr/lib), sugeriría informar al vinculador dónde buscarlo a través de la -Lbandera. El comando luego leería (tenga en cuenta el -L/usr/lib/x86_64-linux-gnu)

g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo

Si está utilizando un manuscrito Makefile, simplemente puede modificar el comando del compilador / enlazador de esta manera. De lo contrario, tendrá que tocar su sistema de compilación para incluirlo.

mbeyss
fuente
o prueba, LDFLAGSpor ejemplomake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver
Si está buscando una solución puramente temporal, esto también hará el truco. Sin embargo, aconsejo hacerlo LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/para preservar cualquier configuración anterior
mbeyss