Saya sedang membangun program C ++ sederhana dan saya ingin sementara mengganti sistem perpustakaan bersama yang disediakan dengan versi yang lebih baru, untuk pengembangan dan pengujian.
Saya mencoba mengatur variabel LD_LIBRARY_PATH tetapi tautannya (ld) gagal dengan:
/ usr / bin / ld: tidak dapat menemukan -lyaml-cpp
Saya berharap itu berfungsi karena menurut halaman manual ld:
Linker menggunakan jalur pencarian berikut untuk menemukan perpustakaan bersama yang diperlukan: ... Untuk linker asli, isi variabel lingkungan "LD_LIBRARY_PATH" ...
Saya kemudian mencoba mengatur LIBRARY_PATH, dan itu berhasil.
Menurut manual GCC:
Nilai LIBRARY_PATH adalah daftar direktori yang dipisahkan oleh titik dua, seperti PATH. Ketika dikonfigurasikan sebagai kompiler asli, GCC mencoba direktori yang ditentukan saat mencari file linker khusus, jika tidak dapat menemukannya menggunakan GCC_EXEC_PREFIX. Menautkan menggunakan GCC juga menggunakan direktori ini ketika mencari pustaka biasa untuk opsi -l (tetapi direktori yang ditentukan dengan -L didahulukan).
Seperti yang disarankan oleh manual (GCC), LIBRARY_PATH berfungsi karena saya terhubung dengan GCC.
Tapi..
- Karena saya terhubung dengan gcc mengapa ld dipanggil, seperti pesan kesalahan menyarankan?
- Apa gunanya memiliki dua variabel yang melayani tujuan yang sama? Apakah ada perbedaan lain?
LIBRARY_PATH
digunakan untuk mencari direktori yang berisi perpustakaan statis DAN dinamis, bukan hanya perpustakaan statis.LIBRARY_PATH
mencari pustaka (statis atau dinamis) pada waktu kompilasi danLD_LIBRARY_PATH
dicari pustaka dinamis pada saat run time. Tentu saja pada saat run time Anda tidak perlu mencari perpustakaan statis.LD_LIBRARY_PATH
dicari ketika program dimulai,LIBRARY_PATH
dicari pada waktu tautan.peringatan dari komentar :
ld
(bukangcc
ataug++
), variabelLIBRARY_PATH
atauLD_LIBRARY_PATH
lingkungan tidak dibaca.gcc
ataug++
,LIBRARY_PATH
variabel lingkungan dibaca (lihat dokumentasi "gcc
menggunakan direktori ini saat mencari perpustakaan biasa" ).sumber
ld
dengan sendirinya tidak mencari pustaka di salah satuLIBRARY_PATH
atauLD_LIBRARY_PATH
. Hanya ketikagcc
memanggilld
yangLIBRARY_PATH
digunakan. (Mempelajari ini dengan cara yang sulit.)panggilan gcc ld secara internal ketika sedang dalam mode menghubungkan.
sumber