0Pricing
C Academy · Pelajaran

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

Membuat 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.o

Menautkan 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 app

Pertimbangan 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.o

Membuat 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.so

Menautkan 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 app

Menemukan 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=. ./app

Pertimbangan 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 .so bermanfaat bagi setiap program tanpa penautan ulang
  • Namun, program gagal dimulai jika .so tidak 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 app mencantumkan pustaka bersama yang diperlukan pemuat saat program berjalan
  • nm libmymath.a mencantumkan simbol (fungsi) di dalam pustaka

Jika ldd menampilkan 'not found', pemuat tidak dapat menemukan .so tersebut di jalur pencariannya.

ldd app
nm libmymath.a

Pemeriksaan 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 -L dan -l; pustaka bersama memerlukan jalur pencarian saat program berjalan seperti LD_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

  1. Kompilasi Kondisional
  2. Proyek Banyak File
  3. Makefile
  4. Pustaka Statis dan Bersama
← Kembali ke C Academy