GNU/Linux >> Belajar Linux >  >> Linux

usr/bin/ld:tidak dapat menemukan -l<nameOfTheLibrary>

Untuk mencari tahu apa yang dicari linker, jalankan dalam mode verbose.

Misalnya, saya mengalami masalah ini saat mencoba mengkompilasi MySQL dengan dukungan ZLIB. Saya menerima kesalahan seperti ini selama kompilasi:

/usr/bin/ld: cannot find -lzlib

Saya melakukan beberapa Googl'ing dan terus menemukan masalah berbeda dari jenis yang sama di mana orang akan mengatakan untuk memastikan file .so benar-benar ada dan jika tidak, maka buat symlink ke file berversi, misalnya, zlib. jadi.1.2.8. Tapi, ketika saya cek, zlib.so DID ada. Jadi, saya pikir, pasti bukan itu masalahnya.

Saya menemukan posting lain di Internet yang menyarankan untuk menjalankan make dengan LD_DEBUG=all:

LD_DEBUG=all make

Meskipun saya mendapat TON keluaran debug, itu sebenarnya tidak membantu. Itu menambah lebih banyak kebingungan daripada yang lainnya. Jadi, saya hampir menyerah.

Kemudian, saya mendapat pencerahan. Saya berpikir untuk benar-benar memeriksa teks bantuan untuk perintah ld:

ld --help

Dari situ, saya menemukan cara menjalankan ld dalam mode verbose (bayangkan itu):

ld -lzlib --verbose

Ini adalah output yang saya dapatkan:

==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib

Ding, ding, ding...

Jadi, untuk akhirnya memperbaikinya sehingga saya dapat mengkompilasi MySQL dengan ZLIB versi saya sendiri (bukan versi bundel):

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

Voila!


Jika nama perpustakaan Anda ucapkan libxyz.so dan terletak di jalur say:

/home/user/myDir

lalu untuk menautkannya ke program Anda:

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog

Sepertinya tidak ada jawaban yang mengatasi masalah pemula yang sangat umum karena gagal menginstal pustaka yang diperlukan.

Pada platform Debianish, jika libfoo hilang, Anda sering dapat menginstalnya dengan sesuatu seperti

apt-get install libfoo-dev

-dev versi paket diperlukan untuk pekerjaan pengembangan, bahkan pekerjaan pengembangan yang sepele seperti mengompilasi kode sumber untuk ditautkan ke perpustakaan.

Nama paket terkadang memerlukan beberapa dekorasi (libfoo0-dev ? foo-dev tanpa lib awalan? dll), atau Anda cukup menggunakan pencarian paket distro Anda untuk mengetahui dengan tepat paket mana yang menyediakan file tertentu.

(Jika ada lebih dari satu, Anda perlu mencari tahu apa perbedaannya. Memilih yang paling keren atau paling populer adalah jalan pintas yang umum, tetapi bukan prosedur yang dapat diterima untuk pekerjaan pengembangan yang serius.)

Untuk arsitektur lain (terutama RPM) berlaku prosedur serupa, meskipun detailnya akan berbeda.


Linux
  1. Apa arti dari /usr/sbin, /usr/local/sbin dan /usr/local/bin?

  2. Perbedaan antara /bin dan /usr/bin

  3. Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

  1. kesalahan konfigurasi phpize:tidak dapat menemukan sumber (config.m4)

  2. /usr/bin Vs /usr/local/bin Di Linux?

  3. Apa itu /usr/bin/[?

  1. /usr/bin/ls:/usr/bin/ls:Tidak Dapat Mengeksekusi File Biner?

  2. Tidak Dapat Menemukan -lm?

  3. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?