/ usr / bin / ld: impossible de trouver -lOpenCL

10

J'essaie actuellement de compiler un programme simple donné en OpenCL à partir de ce site Web. Il me donnera le nécessaire DeviceInfodont j'ai besoin. Après avoir simplement appelé un make, j'obtiens l'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 ce site Web. Cependant, je reçois toujours l'erreur ci-dessus.

Comment puis-je résoudre cette erreur?

Sharan Duggirala
la source

Réponses:

14

Votre éditeur de liens ne trouve pas la OpenCLbibliothèque.

Vous devriez aider l'éditeur de liens à trouver la OpenCLbibliothèque.

Un problème similaire a été soulevé ici

La solution était de créer un lien pour la bibliothèque vers 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 OpenCLbibliothèque située dans /usr/lib/x86_64-linux-gnu/vous pouvez également ajouter le dossier de la bibliothèque au chemin des bibliothèques:

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

Vous devrez peut-être mettre à jour le "Dynamic Linker":

sudo ldconfig
Yaron
la source
1
Cela a fonctionné pour moi! La toute première réponse. Je vous remercie!
Sharan Duggirala
3

Comme déjà indiqué par Yaron, l'éditeur de liens ne sait pas où trouver la bibliothèque OpenCL, c'est-à-dire qu'il ne se trouve nulle part où il la recherche.

Au lieu de le déplacer vers l'un de ces endroits (par exemple /usr/lib), je suggère d'informer l'éditeur de liens où le chercher via le -Ldrapeau. La commande se lirait alors (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 manuscrit, Makefilevous pouvez simplement modifier la commande du compilateur / éditeur de liens comme ceci. Sinon, vous devrez toucher votre système de construction pour l'inclure.

mbeyss
la source
ou essayez LDFLAGSpar exemplemake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver
Si vous cherchez une solution purement temporaire, cela fera aussi l'affaire. Cependant, je conseille de le faire LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/pour conserver les paramètres précédents
mbeyss