J'essaie actuellement de compiler un programme simple donné dans OpenCL depuis le site this . Cela me donnera le DeviceInfo
requis. Après avoir simplement appelé un make
, j'obtiens le message d'erreur ci-dessous:
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
Maintenant, j'ai installé en utilisant les instructions de this website. Cependant, je reçois toujours l'erreur ci-dessus.
Comment puis-je résoudre cette erreur?
Votre éditeur de liens ne peut pas trouver la bibliothèque OpenCL
.
Vous devriez aider l'éditeur de liens à trouver la bibliothèque OpenCL
.
Un problème similaire a été soulevé ici
La solution consistait à créer un lien entre la bibliothèque et un emplacement de bibliothèque connu:
Sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so
Une autre option:
En supposant que la bibliothèque OpenCL
située dans /usr/lib/x86_64-linux-gnu/
, vous pouvez également ajouter le dossier de la bibliothèque au chemin de la bibliothèque:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"
Vous devrez peut-être mettre à jour le "lieur dynamique":
Sudo ldconfig
Comme déjà indiqué par Yaron, l’éditeur de liens ne sait pas où trouver la bibliothèque OpenCL, c’est-à-dire qu’elle n’est recherchée à aucun endroit.
Au lieu de le déplacer vers l'un de ces emplacements (par exemple /usr/lib
), je suggérerais d'indiquer à l'éditeur de liens où le rechercher via l'indicateur -L
. La commande serait alors lue (notez le -L/usr/lib/x86_64-linux-gnu
)
g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo
Si vous utilisez un Makefile
manuscrit, vous pouvez simplement modifier la commande compiler/linker comme ceci. Sinon, vous devrez toucher votre système de compilation pour savoir comment l'inclure.