Actualmente estoy intentando compilar un programa simple proporcionado en OpenCL desdeestesitio web. Me dará lo requerido DeviceInfo
que necesito. Después de simplemente invocar a make
, aparece 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 siguiendo las instrucciones deestesitio web. Sin embargo, sigo recibiendo el error anterior.
¿Cómo puedo solucionar este error?
Respuesta1
Su vinculador no puede encontrar la OpenCL
biblioteca.
Deberías ayudar al vinculador a encontrar la OpenCL
biblioteca.
Se planteó una cuestión similaraquí
La solución fue crear un enlace para la biblioteca a una ubicación de biblioteca conocida:
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so
Otra opción:
Suponiendo que la OpenCL
biblioteca 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 necesites actualizar el "Enlazador dinámico":
sudo ldconfig
Respuesta2
Como ya afirmó Yaron, el vinculador no sabe dónde encontrar la biblioteca OpenCL, es decir, no se encuentra 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 -L
bandera. El comando entonces dirí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 comando escrito a mano, 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.