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

10

Derzeit wird versucht, ein einfaches Programm in OpenCL von dieser Website zu kompilieren . Es wird mir das DeviceInfoNotwendige geben, das ich brauche. Nach dem einfachen Aufrufen von a makewird der folgende Fehler angezeigt:

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

Jetzt habe ich mit den Anweisungen von dieser Website installiert . Allerdings bekomme ich immer noch den Fehler oben.

Wie kann ich diesen Fehler beheben?

Sharan Duggirala
quelle

Antworten:

14

Ihr Linker kann die OpenCLBibliothek nicht finden .

Sie sollten dem Linker helfen, die OpenCLBibliothek zu finden .

Ein ähnliches Problem wurde hier angesprochen

Die Lösung bestand darin, einen Link für die Bibliothek zu einem bekannten lib-Speicherort herzustellen:

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

Andere Option:

Angenommen, 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
Yaron
quelle
1
Das hat bei mir funktioniert! Die allererste Antwort. Vielen Dank!
Sharan Duggirala
3

Wie bereits von Yaron angegeben, weiß der Linker nicht, wo sich die OpenCL-Bibliothek befindet, dh sie befindet sich an keinem der Orte, nach denen sie sucht.

Anstatt es an einen dieser Orte zu verschieben (z. B. /usr/lib), würde ich vorschlagen, den Linker darüber zu informieren, wo er über die -LFlagge danach suchen soll . Der Befehl würde dann lesen (beachten Sie die -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 Handschrift verwenden Makefile, können Sie den Compiler / Linker-Befehl einfach so ändern. Andernfalls müssen Sie Ihr Build-System berühren, um es einzuschließen.

mbeyss
quelle
oder versuchen Sie es LDFLAGSzBmake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
Steeldriver
Wenn Sie nach einer rein vorübergehenden Lösung suchen, reicht dies ebenfalls aus. Ich LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/
rate