Bagaimana cara melacak pemuatan perpustakaan?

16

Saya punya program yang tergantung pada perpustakaan yang terhubung ke libboost 1.67, yang diinstal di sistem. Ketika saya meluncurkannya, saya memiliki kesalahan yang libboost_system.so.1.58tidak ada. LD_PRELOADdan LD_LIBRARY_PATHtidak disetel.

lddtreeeksekusi tidak menunjukkan pustaka ini sebagai dependensi tetapi lddtidak.

Bagaimana saya bisa melacak dari mana perpustakaan diperlukan?

Alex
sumber

Jawaban:

16

Jika pada sistem GNU, coba jalankan aplikasi Anda dengan:

LD_DEBUG=libs your-application

Lihat LD_DEBUG=helpopsi lainnya atau man ld.so.

Stéphane Chazelas
sumber
ketika saya mencoba LD_DEBUG = libs python3.6 di tcsh saya mendapatkan perintah LD_DEBUG tidak ditemukan. Apa alternatif tcsh?
gansub
1
@ gansub awalan perintah dengan envdalam tcsh
Stéphane Chazelas
6

Jika program memuat libboost_system secara manual menggunakan dlopen (), Anda mungkin dapat menemukan di mana ia melakukan itu menggunakan ltrace untuk melihat apakah ia memanggil dlopen (), dan mungkin gdb untuk menetapkan breakpoint pada panggilan ke dlopen () dan kemudian menghasilkan backtrace tumpukan. (Lihat juga latrace .)

DW
sumber