Jawaban:
Sebuah .a
file adalah perpustakaan statis, sementara .so
file adalah shared object (dinamis) perpustakaan mirip dengan DLL pada Windows. Ada beberapa informasi terperinci tentang perbedaan antara keduanya di halaman ini .
.a
hanya dapat dimasukkan sebagai bagian dari program selama kompilasi. .so
Dapat "diimpor" saat program dimuat.
ar
utilitas. Info lebih lanjut di sini
Sebagai tindak lanjut, file .a adalah arsip "ar". Tidak seperti arsip tar, ia menyimpan file .o atau objek, yang memungkinkannya untuk dikeluarkan dari arsip, dan dihubungkan ke suatu program, antara lain. Anda dapat menggunakan ar untuk menyimpan file lain jika Anda mau.
Anda bisa mendapatkan daftar anggota file ar dengan parameter -t, misalnya:
ar -t /usr/lib/libc.a
File .so adalah file "objek bersama", dan memiliki lebih banyak informasi yang tersedia untuk tautan sehingga anggota dapat ditautkan ke program pemuatan secepat mungkin.
Misalnya, coba:
objdump -T /lib/libc-2.11.1.so
(atau versi libc.so apa pun yang Anda miliki di direktori / lib Anda.) Perhatikan bahwa file .so juga bisa berisi skrip linker yang mengarahkannya untuk menemukan file tersebut di tempat lain, atau menggunakan sesuatu yang lain.
Menariknya, file .so juga bisa menjadi program yang lengkap. Misalnya, mencoba menjalankan /lib/libc.so.6 . (Sayangnya, bagian terakhir ini sepertinya tidak bekerja pada sistem yang lebih modern. Bukan berarti itu kerugian besar.)
ar -t /usr/lib/libc.a
. Sebenarnya -
sepertinya tidak perlu dalam kasus ini. Juga /lib/libc.so.6.
hanya mencetak beberapa output. Saya tidak tahu apakah saya akan menyebutnya full fledged program
.
ldd
di .so, dan itu akan menunjukkan kepada Anda apa perpustakaan lain yang digunakannya. Static akan kembali dengan pesan yang mengatakan itu bukan perpustakaan yang dinamis.