Saya mencoba membangun program c ++ menggunakan Unix.
Saya mendapat kesalahan
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Saya mendengar bahwa saya hanya perlu mengatur lokasi libboost * di variabel env LD_LIBRARY_PATH saya dan kemudian memanggil make seperti yang saya lakukan sebelumnya, dengan mengetik
-L /usr/lib64 -l boost_regex-mt
atau
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Tetapi di mana LD_LIBRARY_PATH? bagaimana cara mengatur variabel env LD_LIBRARY_PATH?
Jawaban:
Anda sudah mengaturnya saat melakukan ini:
Tetapi itu tidak akan menyelesaikan masalah Anda.
$LD_LIBRARY_PATH
dikonsultasikan pada saat eksekusi, untuk memberikan daftar direktori tambahan untuk mencari perpustakaan yang dapat dihubungkan secara dinamis. Itu tidak dikonsultasikan pada waktu tautan (kecuali mungkin untuk menemukan perpustakaan yang dibutuhkan oleh alat yang dibangun sendiri!).Untuk memberi tahu linker di mana menemukan perpustakaan saat membangun, Anda perlu menggunakan
-L
opsi tautan . Anda sudah melakukannya juga:Jika Anda masih mendapatkan kesalahan, maka Anda perlu memastikan bahwa perpustakaan benar-benar ada. Apakah Anda memiliki file
libboost_regex-mt.so
ataulibboost_regex-mt.a
di direktori (atau ada) itu? Perhatikan bahwa file sepertilibboost_regex-mt.so.othersuffix
tidak dihitung untuk tujuan ini. Jika Anda tidak memilikinya, maka Anda mungkin perlu menginstal paket pengembangan distribusi Anda untuk perpustakaan ini.sumber
$LD_LIBRARY_PATH
juga dikonsultasikan denganld
: «5. Untuk penaut asli, cari konten variabel lingkungan" LD_LIBRARY_PATH ". »ld
manual hanya menyangkut dependensi rekursif: pustaka dependen dari pustaka yang sudah dipilih untuk dihubungkan Itu yang-L
dilakukannya.apt-get
memberi Anda perintah tidak ditemukan maka itu bukan Debian jadi Anda perlu metode lain untuk menginstal paket yang hilang. Itulah yang pasti menjadi masalah Anda.-Ldir -llib
harus berfungsi sebagai argumen untukld
ataugcc/g++/etc
ketika termasuk fase tautan, tetapi Q asli & dipulihkan menyebutkanmake
: dengan makefile normal yang mungkin Anda perlukanLDFLAGS="whatever"
dan dengan makefile pintar, Anda mungkin memerlukan hampir semua hal, termasuk batu bata untuk dilemparkan ke pembuat makefile yang pintar.Cara lain untuk menambahkan jalur baru secara permanen di LD_LIBRARY_PATH:
Edit
.conf
file dalam/etc/ld.so.conf.d/
.Saya pernah menginstal aplikasi dan perpustakaannya tidak dapat dikenali oleh aplikasi lain. Lalu saya menambahkan path, yaitu
/usr/local/hdf5/lib
kex86_64-linux-gnu.conf
file. Masukkan saja ke baris berikutnya. Menyimpan.Lalu lari
sudo ldconfig
Itu berhasil.
PS: OS Ubuntu 14.04
sumber
Anda dapat mengaturnya di
~/.profile
file init spesifik Anda dan / atau shell Anda (misalnya~/.bashrc
untuk bash,~/.zshenv
untuk zsh). Maka Anda perlu me-restart shell Anda (dan mungkin logout dan login lagi, tergantung pada pilihan Anda).Anda dapat memeriksa pengaturan Anda dengan:
EDIT:
LD_LIBRARY_PATH
adalah untuk pustaka bersama yang berisi kode mesin, yang nama filenya biasanya berisi.so
dalam namanya, mungkin diikuti oleh angka yang dipisahkan oleh titik untuk membedakan versi yang berbeda. Ada kemungkinan bahwa meskipunLD_LIBRARY_PATH
, perpustakaan tidak ditemukan karena ketidakcocokan ABI. Perhatikan juga bahwa bahasa (seperti Perl dan Python) dan paket mungkin memiliki sistem perpustakaan mereka sendiri (mungkin juga dengan.so
file), tidak terkaitLD_LIBRARY_PATH
.sumber
LD_LIBRARY_PATH
(untuk menghindari tabrakan dengan perpustakaan yang biasa). Anda perlu mengajukan pertanyaan khusus untuk ini, dengan pesan kesalahan yang Anda dapatkan.Jika kesalahan jalur perpustakaan Anda ada di tautan, saat kompilasi, Anda perlu menambahkan jalur ke perpustakaan ke dalam variabel $ LD_LIBRARY_PATH. Jika kesalahan pustaka adalah ketika Anda benar-benar menjalankan program yang dikompilasi maka Anda perlu menambahkan path pustaka ke /etc/ld.so.conf dan jalankan ldconfig untuk membangun kembali cache path pencarian pustaka.
sumber
Dipecahkan dengan:
tambahkan ke
/etc/systemd/system/pm2-node.service
sumber