Pustaka Statis dan Bersama
Bangun dan tautkan pustaka.
Pustaka Statis dan Bersama adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Apa Itu Pustaka
Pustaka adalah kumpulan berkas objek yang telah dikompilasi dan dapat digunakan kembali di berbagai program tanpa mengompilasi ulang sumbernya setiap kali.
C memiliki dua jenis:
- Pustaka statis (
.a) yang disalin ke dalam berkas eksekusi saat penautan - Pustaka bersama (
.so) yang dimuat saat program berjalan
Membangun Berkas Objek
Kedua jenis pustaka dimulai dari berkas objek. Kompilasikan sumber Anda dengan -c seperti biasa.
Berkas .o ini adalah bahan mentah yang akan dikemas oleh pengarsip atau penaut.
gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.oMembuat Pustaka Statis
Pengarsip ar menggabungkan berkas objek menjadi arsip .a. Nama yang umum digunakan adalah lib<name>.a.
Arti benderanya: r menyisipkan, c membuat jika diperlukan, dan s menulis indeks.
ar rcs libmymath.a mathlib.o strlib.oMenautkan Pustaka Statis
Tautkan dengan -L untuk menentukan direktori pencarian dan -l untuk menentukan nama pustaka (hapus awalan lib dan akhiran .a).
Kode yang diperlukan disalin ke dalam berkas eksekusi, yang kemudian dapat berjalan secara mandiri.
gcc main.c -L. -lmymath -o appPertimbangan Pustaka Statis
Penautan statis bersifat sederhana dan mandiri:
- Berkas eksekusi membawa semuanya; tidak ada dependensi saat program berjalan
- Namun, setiap program yang menyimpan salinannya akan menghasilkan berkas biner yang lebih besar
- Memperbaiki galat pada pustaka mengharuskan setiap program yang menggunakannya ditautkan ulang
Kode Independen Posisi
Pustaka bersama dapat dimuat di alamat memori mana pun, sehingga kodenya harus independen terhadap posisi. Kompilasikan dengan -fPIC.
Ini menghasilkan kode yang menggunakan pengalamatan relatif, bukan alamat tetap.
gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.oMembuat Pustaka Bersama
Bangun .so dengan -shared. Konvensinya adalah lib<name>.so.
Berbeda dari arsip statis, ini adalah objek tertaut sungguhan yang dapat dipetakan oleh pemuat saat program berjalan.
gcc -shared mathlib.o strlib.o -o libmymath.soMenautkan Pustaka Bersama
Penautannya terlihat sama seperti pada kasus statis. Perbedaannya, kode tidak disalin; hanya referensi yang dicatat.
Berkas eksekusi tetap kecil, tetapi sekarang bergantung pada ditemukannya libmymath.so saat program berjalan.
gcc main.c -L. -lmymath -o appMenemukan Pustaka Saat Program Berjalan
Saat mulai, pemuat dinamis mencari .so di jalur standar. Pustaka di direktori saat ini tidak termasuk dalam daftar tersebut.
Arahkan pemuat ke pustaka itu dengan LD_LIBRARY_PATH (Linux) untuk pengujian.
LD_LIBRARY_PATH=. ./appPertimbangan Pustaka Bersama
Pustaka bersama mengorbankan kesederhanaan demi fleksibilitas:
- Satu salinan di memori digunakan bersama oleh banyak program, sehingga menghemat RAM dan ruang disk
- Perbaikan galat pada
.sobermanfaat bagi setiap program tanpa penautan ulang - Namun, program gagal dimulai jika
.sotidak ada atau tidak kompatibel
Risiko terakhir ini dikenal sebagai 'neraka dependensi'.
Memeriksa Dependensi
Dua alat membantu Anda melihat apa saja yang menjadi tujuan penautan sebuah biner:
ldd appmencantumkan pustaka bersama yang diperlukan pemuat saat program berjalannm libmymath.amencantumkan simbol (fungsi) di dalam pustaka
Jika ldd menampilkan 'not found', pemuat tidak dapat menemukan .so tersebut di jalur pencariannya.
ldd app
nm libmymath.aPemeriksaan Singkat
Pasangkan bendera dengan tujuannya.
Rangkuman
Sekarang Anda dapat membangun dan menautkan kedua jenis pustaka:
- Statis:
ar rcs libX.a *.o, kode disalin ke dalam biner, mandiri tetapi lebih besar - Bersama: kompilasikan dengan
-fPIC, bangun dengan-shared, kode dimuat saat program berjalan - Tautkan keduanya dengan
-Ldan-l; pustaka bersama memerlukan jalur pencarian saat program berjalan sepertiLD_LIBRARY_PATH
Sekarang Anda telah menguasai seluruh rantai alat dari praprosesor hingga pembangunan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pustaka Statis dan Bersama” gratis?
Ya — teks lengkap “Pustaka Statis dan Bersama” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pustaka Statis dan Bersama”?
Bangun dan tautkan pustaka. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pustaka Statis dan Bersama” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kompilasi Kondisional
- Proyek Banyak File
- Makefile
- Pustaka Statis dan Bersama