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 make
erhalte 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 OpenCL
Bibliothek 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 OpenCL
Bibliothek 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, Makefile
können Sie den Compiler-/Linker-Befehl einfach wie folgt ändern. Andernfalls müssen Sie Ihr Build-System so anpassen, dass es eingebunden wird.