Temukan perpustakaan yang ditautkan dengan biner

40

Saya tahu bahwa ada perintah yang mencantumkan saya lib dan versi yang terkait dengan perangkat lunak.

Sesuatu dengan ld atau libtool?

Tapi saya tidak ingat. Menghabiskan waktu di google tetapi tidak menghasilkan sesuatu yang berguna.

Pembaruan
ldd <binary> akan membantu di linux, ( dari @ Ernelli ) sementara saya menemukan bahwa otool -L <binary>melakukan sesuatu yang serupa pada MacOS X.

er4z0r
sumber
stackoverflow.com/questions/50159/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

42

Coba ldd binary-exec

Contoh:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)
Ernelli
sumber
Dang! Jadi percobaan pertama saya benar. Hanya perlu menginstalnya di Mac saya sehingga secara akut tahu perintah ;-)
er4z0r
@ er4z0r: FYI, Mac OS adalah BSD, bukan Linux .
grawity
6
grwaity: Anda benar. Sementara ldd akan membantu di linux saya menemukan bahwa 'otool -L <binary>' melakukan hal serupa.
er4z0r
15

Untuk menemukan apa yang dibutuhkan secara langsung:

readelf -d APP | grep NEEDED

lddseperti yang disebutkan di tempat lain akan menunjukkan semua lib langsung dan tidak langsung - semua yang dibutuhkan saat runtime. Ini mungkin bukan daftar lengkap, karena Anda mungkin secara dinamis membuka hal-hal dengan dlopen (), tetapi ini harus bekerja 99% dari waktu.

ld dan libtool digunakan pada waktu kompilasi / tautan. Mereka tidak berguna setelah Anda memiliki aplikasi.

EDIT Saya dapat melihat jawaban nanti yang Anda tanyakan tentang OSX, tetapi saya ingin menambahkan jawaban saya di perangkat Linux:

Satu hal yang saya lupa sebutkan, beberapa waktu yang lalu; Anda bertanya tentang versi. Juga lddtidak readelfakan menjawab pertanyaan "versi apa". Mereka akan memberi tahu Anda nama file perpustakaan yang Anda cari, dan konvensi penamaan mungkin memiliki beberapa info versi, tetapi tidak ada yang memberlakukan ini. Simbol mungkin versi, dan Anda harus lebih banyak tentang tingkat yang lebih rendah nmuntuk melihatnya,

Homolka yang kaya
sumber
9

Cara lain adalah dengan menggunakan objdump.

objdump -x "binary" | grep DIPERLUKAN

Ini menunjukkan semua dependensi yang diperlukan hanya untuk biner ini. Sangat berguna.

Pranav
sumber