/ usr / bin / ld: nie można znaleźć -lOpenCL

10

Obecnie próbuję skompilować prosty program podany w OpenCL z tej strony. Da mi to DeviceInfo, czego potrzebuję. Po zwykłym wywołaniu a pojawia makesię następujący błąd:

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

Teraz zainstalowałem przy użyciu instrukcji z tej strony. Jednak nadal pojawia się błąd powyżej.

Jak mogę rozwiązać ten błąd?

Sharan Duggirala
źródło

Odpowiedzi:

14

Linker nie może znaleźć OpenCLbiblioteki.

Powinieneś pomóc linkerowi znaleźć OpenCLbibliotekę.

Podobny problem został podniesiony tutaj

Rozwiązaniem było utworzenie łącza do biblioteki do znanej lokalizacji lib:

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

Inna opcja:

Zakładając, że OpenCLbiblioteka w /usr/lib/x86_64-linux-gnu/tobie może również dodać folder biblioteki do ścieżki bibliotek:

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

Konieczne może być zaktualizowanie „Dynamic Linker”:

sudo ldconfig
Yaron
źródło
1
To zadziałało dla mnie! Pierwsza odpowiedź. Dziękuję Ci!
Sharan Duggirala
3

Jak już stwierdził Yaron, linker nie wie, gdzie znaleźć bibliotekę OpenCL, tzn. Nie ma jej w żadnym miejscu, którego szuka.

Zamiast przenosić go do jednego z tych miejsc (np. /usr/lib) Sugerowałbym poinformować linkera, gdzie szukać go za pomocą -Lflagi. Polecenie przeczytałoby następnie (zwróć uwagę na -L/usr/lib/x86_64-linux-gnu)

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

Jeśli używasz odręcznie Makefile, możesz po prostu zmodyfikować polecenie kompilatora / linkera w ten sposób. W przeciwnym razie będziesz musiał dotknąć systemu kompilacji, jak go uwzględnić.

mbeyss
źródło
lub spróbuj LDFLAGSnp.make 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver
Jeśli szukasz czysto tymczasowego rozwiązania, to również załatwi sprawę. Jednak radzę, LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/aby zachować poprzednie ustawienia
mbeyss