/ usr / bin / ld: tidak dapat menemukan -lOpenCL

10

Saat ini sedang mencoba menyusun program sederhana yang diberikan dalam OpenCL dari situs web ini . Ini akan memberi saya persyaratan DeviceInfoyang saya butuhkan. Setelah memohon make, saya mendapatkan kesalahan di bawah ini:

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

Sekarang saya telah menginstal menggunakan instruksi dari situs web ini . Namun, saya tetap mendapatkan error di atas.

Bagaimana saya bisa mengatasi kesalahan ini?

Sharan Duggirala
sumber

Jawaban:

14

Linker Anda tidak dapat menemukan OpenCLperpustakaan.

Anda harus membantu tautan untuk menemukan OpenCLperpustakaan.

Masalah serupa muncul di sini

Solusi di sana adalah membuat tautan untuk perpustakaan ke lokasi lib yang diketahui:

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

Pilihan lain:

Dengan asumsi bahwa OpenCLperpustakaan yang berada di dalam /usr/lib/x86_64-linux-gnu/Anda juga dapat menambahkan folder perpustakaan ke jalur Perpustakaan:

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

Anda mungkin perlu memperbarui "Dynamic Linker":

sudo ldconfig
Yaron
sumber
1
Ini berhasil untuk saya! Jawaban pertama. Terima kasih!
Sharan Duggirala
3

Seperti yang sudah dinyatakan oleh Yaron, penghubung tidak tahu di mana menemukan pustaka OpenCL, artinya tidak ada tempat untuk mencarinya.

Alih-alih memindahkannya ke salah satu tempat (misalnya /usr/lib) saya sarankan untuk memberi tahu linker di mana mencarinya melalui -Lflag. Perintah itu kemudian akan membaca (perhatikan -L/usr/lib/x86_64-linux-gnu)

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

Jika Anda menggunakan tulisan tangan, MakefileAnda cukup memodifikasi perintah kompiler / tautan seperti ini. Kalau tidak, Anda harus menyentuh sistem build Anda bagaimana memasukkannya.

Mbeyss
sumber
atau coba LDFLAGSmisalnyamake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver
Jika Anda mencari solusi murni sementara ini juga akan melakukan trik. Namun saya menyarankan untuk membuatnya LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/mempertahankan pengaturan sebelumnya
mbeyss