Perpustakaan di C tepatnya adalah perpustakaan. Saya tahu kedengarannya tidak jelas, tetapi tidak ada cara yang lebih baik untuk menggambarkannya, setidaknya secara dangkal. Perpustakaan di dunia nyata merupakan kumpulan benda-benda yang berisi informasi. Objek pada perpustakaan fisik adalah buku, sedangkan objek pada perpustakaan C adalah file objek program yang dikompilasi menjadi file yang biasanya diakhiri dengan akhiran “.a” menggunakan program ar. File-file ini kemudian dapat digunakan sebagai satu kesatuan dalam fase penautan suatu program. Awalnya tujuan perpustakaan statis adalah untuk menghemat waktu kompilasi dengan menghubungkan program-program yang telah dikompilasi sebelumnya daripada mengkompilasinya dari awal. Dengan kompiler cepat saat ini, hal ini tidak membuat banyak perbedaan, namun masih ada alasan untuk menggunakannya

Jenis Perpustakaan

Saya sebelumnya telah menyebutkan perpustakaan statis, tetapi secara umum, ada dua jenis dasar perpustakaan perangkat lunak:

  • Perpustakaan statis. Pustaka tempat modul diikat ke file yang dapat dieksekusi sebelum dieksekusi. Perpustakaan statis biasanya diberi nama libnama.a. Akhiran .a mengacu pada arsip.
  • Perpustakaan dinamis. Pustaka tempat modul dapat diikat ke program yang dapat dieksekusi saat runtime. Perpustakaan dinamis biasanya diberi nama libnama.so. Akhiran .so mengacu pada objek bersama.

Mengapa Anda menggunakan perpustakaan?

Perpustakaan, baik dinamis maupun statis dapat menjadi alat penghemat waktu yang sangat berguna. Kecuali Anda memiliki skenario yang sangatspesifik dan terspesialisasi untuk dicapai oleh fungsi Anda, kemungkinan besar, orang lain telah membuat fungsi yang melakukan persis seperti yang Anda perlukan. Tidak perlu menemukan kembali roda setiap kali Anda menulis kode, ketika orang lain telah menciptakannya untuk Anda.

Jika Anda ingin menulis fungsi Anda sendiri baik untuk studi atau proyek, menggunakan perpustakaan dapat menghemat waktu Anda saat kompilasi dengan mencegah Anda menghubungkan fungsi spesifik yang Anda gunakan dalam program yang Anda tulis dalam perintah kompilasi setiap kali Anda ingin mengkompilasi suatu program. Secara keseluruhan, perpustakaan adalah win-win solution.

Bagaimana perpustakaan bekerja

Perpustakaan, seperti yang saya katakan di awal, berfungsi seperti perpustakaan fisik biasa karena merupakan kumpulan informasi. File objek (potongan kode yang telah dikompilasi hingga sebelum tahap penautan) berisi fungsi yang dapat dipanggil oleh program Anda untuk melakukan tugas. File-file ini disimpan di perpustakaan dan kemudian diindeks sehingga kompiler dapat menemukannya di perpustakaan tersebut, dalam kasus perpustakaan statis, atau agar program dapat menemukannya ketika dijalankan dalam kasus perpustakaan dinamis.

Cara membuat perpustakaan statis

Perpustakaan dapat dibuat dengan terlebih dahulu menggunakan gcc untuk membuat file objek untuk file .c yang ingin Anda tambahkan ke perpustakaan dengan menggunakan kode ini.

gcc -Wall -pedantic -Werror -Wextra -c example.c

Yang akan menghasilkan file bernama “example.o” yang akan Anda tentukan saat membuat perpustakaan Anda menggunakan perintah ar. Yang dapat Anda lakukan dengan menulis ini:

ar rcs libproj.a example.o

Syair sebelumnya akan membuat file perpustakaan bernama “libproj.a” yang akan berisi “example.o” di dalamnya. Bendera r pada perintah ar memerintahkannya untuk mengganti file lama dengan yang terbaru, jika perpustakaannya ada, dan bendera c memerintahkannya untuk membuat perpustakaan baru, jika perpustakaan belum ada. Bendera s mengindeks perpustakaan atau memperbarui indeks, yang juga dapat Anda lakukan menggunakan ranlib seperti ini.

ranlib libproj.a

Cara menggunakan perpustakaan statis

nm libproj.a

Anda dapat menggunakan perintah ini untuk melihat fungsi di perpustakaan Anda.

gcc -L. main.c -lproj -o project

Kode di atas mengkompilasi program Anda menggunakan flag -L untuk menyertakan jalur ke perpustakaan Anda

  • Kecualikan awalan lib dan akhiran .a untuk menyertakan perpustakaan Anda

Perintah di atas akan membuat file yang dapat dieksekusi untuk main.c dan menggunakan fungsi apa pun di perpustakaan libproj.a kami. Flag -L. memberi tahu linker bahwa perpustakaan yang kita gunakan ada di direktori kita saat ini. Bagian -lproj dari perintah kita sebenarnya adalah nama perpustakaan kita tanpa libdan .a dengan -l menempel di depannya. Tautan menambahkan kembali bagian nama perpustakaan tersebut saat mencari file perpustakaan.

Singkatnya, perpustakaan adalah alat efektif yang memaksimalkan efisiensi dengan memungkinkan kita fokus pada tugas yang ada tanpa harus mengkhawatirkan setiap detail fungsinya di latar belakang. Saya suka memikirkannya dengan cara yang sama seperti para pembangun tidak perlu khawatir tentang membuat bor atau palu ketika mereka bisa membeli yang sesuai dengan kebutuhan mereka dan dibuat oleh orang-orang yang tahu lebih banyak dari mereka tentang cara membuat benda-benda tersebut. . Dalam skenario seperti itu, perpustakaan adalah kotak peralatan yang berisi alat-alat perdagangan untuk insinyur perangkat lunak.