Apa perbedaan antara file .a dan .so?


Jawaban:


54

Sebuah .afile adalah perpustakaan statis, sementara .sofile adalah shared object (dinamis) perpustakaan mirip dengan DLL pada Windows. Ada beberapa informasi terperinci tentang perbedaan antara keduanya di halaman ini .


18
.ahanya dapat dimasukkan sebagai bagian dari program selama kompilasi. .soDapat "diimpor" saat program dimuat.
LawrenceC

2
apa artinya. berdiri untuk?
hfrmobile

2
@ hfrmobile A adalah singkatan dari arsip - perpustakaan statis adalah kumpulan file objek yang dibuat menggunakan arutilitas. Info lebih lanjut di sini
ajk

28

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.)


Salah ketik. Anda bermaksud menulis 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.
Faheem Mitha

1
Ini adalah program yang lengkap dalam arti bahwa ia memiliki simbol utama untuk ditemukan oleh eksekutif.
Hack Saw

2
Anda juga dapat menjalankan ldddi .so, dan itu akan menunjukkan kepada Anda apa perpustakaan lain yang digunakannya. Static akan kembali dengan pesan yang mengatakan itu bukan perpustakaan yang dinamis.
Marcin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.