Apa itu file .a dan .so?

Jawaban:

484

Perpustakaan arsip (.a) terhubung secara statis yaitu ketika Anda mengkompilasi program Anda dengan opsi -c di gcc. Jadi, jika ada perubahan dalam pustaka, Anda perlu mengkompilasi dan membangun kode Anda lagi.

Keuntungan dari .so (objek yang dibagikan) di atas .a library adalah bahwa mereka terhubung selama runtime yaitu setelah membuat file .o Anda -o opsi di gcc. Jadi, jika ada perubahan pada file .so, Anda tidak perlu mengkompilasi ulang program utama Anda. Tetapi pastikan bahwa program utama Anda terhubung dengan file .so baru dengan perintah ln.

Ini akan membantu Anda membangun file .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Semoga ini membantu.

Rindang
sumber
2
apakah semua ini berhubungan dengan pic(posisi kode independen)?
transang
213

.a adalah pustaka statis. Jika Anda menggunakan kode yang tersimpan di dalamnya, kode itu diambil darinya dan disematkan ke dalam biner Anda sendiri. Dalam Visual Studio, ini akan menjadi file .lib.

.so adalah perpustakaan dinamis. Jika Anda menggunakan kode yang tersimpan di dalamnya, kode itu tidak diambil dan disematkan ke dalam biner Anda sendiri. Sebaliknya itu hanya direferensikan, jadi biner akan bergantung pada mereka dan kode dari file tersebut ditambahkan / dimuat saat runtime. Dalam Visual Studio / Windows ini akan menjadi file .dll (dengan file .lib kecil yang berisi informasi penautan).

Mario
sumber
hai apakah ada opsi untuk mendekompilasi .so file dalam kode c / c ++.?
Jishant
@Ancee: lihat pertanyaan ini: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
.libFile kecil untuk .dlldisebut perpustakaan impor.
Programmer Berorientasi Uang
13

File .a biasanya perpustakaan yang terhubung secara statis (atau arsip yang lebih akurat), dan
.so adalah perpustakaan yang terhubung secara dinamis.

Untuk melakukan port, Anda memerlukan kode sumber yang dikompilasi untuk membuatnya, atau file yang setara pada mesin AIX Anda.

gbulmer
sumber
Bagaimana cara membangun aplikasi saya untuk menggunakan file .so?
Dunc
Ada banyak referensi bagus untuk membangun kedua jenis perpustakaan dan menautkannya di web. Google adalah temanmu.
David Pointer
@Dunc - Ada beberapa cara. Apakah Anda punya makefile? Biasanya perintah yang merakit seluruh program (dan karenanya memanggil linker) akan menentukan tempat untuk mencari file perpustakaan dengan -L / dir / dir1 /.../ dan juga dapat menamai perpustakaan secara eksplisit dengan -lname. Anda akan menemukan bahwa nama sebenarnya adalah libname.a atau libname.so. Tautan kemudian dapat mengetahui apa yang harus dilakukan jika ini adalah program yang cukup normal. Tetapi Anda masih memiliki masalah dalam membuat atau menemukan file .so. Apakah Anda punya kode sumber untuk membangunnya, atau perpustakaan AIX?
gbulmer
10

Mereka digunakan dalam tahap menghubungkan. .afile terhubung secara statis, dan .sofile semacam terhubung, sehingga perpustakaan diperlukan setiap kali Anda menjalankan exe.

Anda dapat menemukan di mana mereka disimpan dengan melihat direktori lib ... /usr/libdan /libmemiliki sebagian besar darinya, dan ada juga LIBRARY_PATHvariabel lingkungan.

Mat
sumber
0

Wikipedia adalah sumber yang layak untuk info ini.

Untuk mempelajari tentang file perpustakaan statis seperti .a baca perpustakaan statis

Untuk mempelajari tentang file perpustakaan bersama seperti .so baca Library_ (komputasi) #Shared_libraries Pada halaman ini, ada juga info berguna di bagian Penamaan file .

pengguna3731622
sumber