/usr/bin/ld: -lOpenCL kann nicht gefunden werden

/usr/bin/ld: -lOpenCL kann nicht gefunden werden

Derzeit versuche ich ein einfaches Programm in OpenCL zu kompilieren vonDasWebsite. Es gibt mir die erforderlichen Informationen DeviceInfo, die ich brauche. Nach dem einfachen Aufruf von a makeerhalte ich den folgenden Fehler:

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

Nun habe ich die Installation nach der Anleitung vonDasWebsite. Allerdings erhalte ich immer noch den oben genannten Fehler.

Wie kann ich diesen Fehler beheben?

Antwort1

Ihr Linker kann die Bibliothek nicht finden OpenCL.

Sie sollten dem Linker helfen, die OpenCLBibliothek zu finden.

Ein ähnliches Problem wurde angesprochenHier

Die Lösung bestand darin, für die Bibliothek einen Link zu einem bekannten Bibliotheksspeicherort zu erstellen:

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

Andere Option:

Vorausgesetzt, die OpenCLBibliothek befindet sich in, /usr/lib/x86_64-linux-gnu/können Sie den Bibliotheksordner auch zum Bibliothekspfad hinzufügen:

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

Möglicherweise müssen Sie den „Dynamic Linker“ aktualisieren:

sudo ldconfig

Antwort2

Wie Yaron bereits festgestellt hat, weiß der Linker nicht, wo die OpenCL-Bibliothek zu finden ist, d. h. sie befindet sich an keinem der Orte, an denen er danach sucht.

Anstatt es an einen dieser Orte zu verschieben (z. B. /usr/lib), würde ich vorschlagen, dem Linker über das Flag mitzuteilen, wo er danach suchen soll -L. Der Befehl würde dann lauten (beachten Sie das -L/usr/lib/x86_64-linux-gnu):

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

Wenn Sie eine handgeschriebene Version verwenden, Makefilekönnen Sie den Compiler-/Linker-Befehl einfach wie folgt ändern. Andernfalls müssen Sie Ihr Build-System so anpassen, dass es eingebunden wird.

verwandte Informationen