Linker Bahasa C dan Fungsinya
Pengertian
- Resolving External References: Linker mengatasi referensi eksternal antar file objek. Jika suatu fungsi atau variabel dideklarasikan di satu file objek tetapi diimplementasikan di file objek lain, linker akan memastikan bahwa referensi tersebut terhubung dengan implementasinya.
- Menggabungkan File Objek: Linker menggabungkan semua file objek yang dihasilkan oleh proses kompilasi menjadi satu executable atau shared object. Ini melibatkan penyusunan berbagai fungsi dan variabel ke dalam satu kesatuan yang dapat dieksekusi.
- Penanganan Simbol: Linker mengelola tabel simbol yang berisi informasi tentang fungsi dan variabel yang digunakan dalam program. Tabel ini membantu dalam penentuan alamat memori yang tepat untuk setiap simbol.
- Pemberian Alamat Memori: Linker memberikan alamat memori absolut untuk setiap instruksi dan data dalam program. Ini melibatkan penentuan lokasi relatif terhadap awal program di memori.
- Penggabungan Libraries: Linker dapat menggabungkan libraries yang di-link secara statis atau dinamis. Libraries ini berisi fungsi-fungsi yang dapat digunakan oleh program dan dihubungkan selama proses linking.
- Penanganan Dynamic Linking: Dalam dynamic linking, linker mempersiapkan program untuk bekerja dengan shared libraries atau dynamic-link libraries (DLL). Linker dinamis melakukan linking saat program dijalankan, memungkinkan berbagi sumber daya antar program.
/* fungsi main.c */
void swap();
int buf[2] = {1, 2};
int main()
{
swap();
return 0;
}
/* fungsi swap.c */
extern int buf[];
int *bufp0 = &buf[0];
int *bufp1;
void swap()
{
int temp;
bufp1 = &buf[1];
temp = *bufp0;
*bufp0 = *bufp1;
*bufp1 = temp;
}
- Aturan satu: Multiple strong simbol dengan nama variabel sama tidak dibolehkan.
- Aturan dua: Jika diberikan strong simbol dan weak simbol, maka yang dipilih adalah strong simbol.
- Aturan tiga: Jika diberikan banyak weak simbol, pilih salah satu dari weak simbol apapun. Contohnya, misalnya akan berupaya untuk mengkompilasi dan menautkan dua modul bahasa C berikut ini:
- /* foo1.c */ int main() {return 0; }
- /* bar1.c */ int main(){return 0;}
/* foo1.c */
int main()
{
return 0;
}
/* bar1.c */
int main()
{
return 0;
}
/* foo2.c */
int x = 15213;
int main()
{
return 0;
}
/* bar2.c */
int x = 15213;
void f()
{}
/* foo3.c */
#include <stdio.h>
void f(void);
int x = 15213;
int main()
{
f();
printf("x = %d\n", x);
return 0;
}
/* bar3.c */
int x;
void f()
{
x = 15212;
}
Contoh: Hal serupa juga dapat terjadi jika terdapat dua definisi weak dari x (aturan 3).
/*a.c*/
#include <stdio.h>
void b(void);
int x;
int main()
{
x = 2016;
b();
printf("x = %d ",x);
return 0;
}
/*b.c*/
#include <stdio.h>
int x;
void b()
{
x = 2017;
}
/*a.c*/
#include <stdio.h>
void b(void);
int x = 2016;
int y = 2017;
int main()
{
b();
printf("x = 0x%x y = 0x"
"%x \n", x, y);
return 0;
}
/*b.c*/
double x;
void b()
{
x = -0.0;
}
- Preprocessing: Proses dimulai dengan pra-pemrosesan (preprocessing) terhadap file kode sumber. Ini melibatkan penggantian macros, pengelompokan header, dan penghilangan komentar.
- Compiling: File kode sumber kemudian di-compile untuk menghasilkan file objek. Setiap file objek berisi kode mesin yang sesuai dengan satu modul atau unit program.
- Linking: Selama linking, linker mengambil file objek dan menggabungkannya menjadi satu program yang dapat dieksekusi atau shared object. Referensi antar file objek diatasi, dan alamat memori diberikan.
- Dynamic Linking (Opsional): Jika dynamic linking digunakan, linker dinamis dapat memproses shared libraries dan menghasilkan dynamic-link libraries (DLL) yang diperlukan untuk program.
- Output: Hasil akhir dari proses linking adalah file eksekusi atau shared object, siap untuk dieksekusi atau dijalankan bersama dengan program lain.
- Pengelolaan Kode yang Modular: Linker memungkinkan pengelolaan kode yang modular. Program dapat dibagi menjadi file objek terpisah, memudahkan pengembangan dan pemeliharaan.
- Pemisahan Implementasi dan Deklarasi: Linker memungkinkan pemisahan antara implementasi (di file objek) dan deklarasi (di header files) suatu fungsi atau variabel. Hal ini mendukung konsep pemrograman berorientasi objek.
- Pemanfaatan Libraries: Linker memungkinkan pemanfaatan libraries, baik secara statis maupun dinamis. Ini mengurangi redundansi dan meningkatkan efisiensi penggunaan memori.
- Dukungan untuk Pengembangan Besar: Linker memfasilitasi pengembangan besar dan kolaborasi tim pengembang dengan memungkinkan integrasi modul-modul yang berbeda.
- Optimasi Kode: Linker dapat melakukan beberapa optimasi kode, seperti eliminasi kode mati atau penyusunan ulang instruksi untuk meningkatkan performa program.
- Variabel Tidak Diawali Angka pada Bahasa C dan Alasannya
- Variabel Static dan Global Bahasa C Beserta Fungsinya
- Tipe Data Umum Bahasa C yang Biasa Digunakan
- Variabel Dua Pilihan pada Bahasa C Menggunakan Bool
- Integer Promotion Bahasa C dan Fungsinya
- Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya
- Tipe Data Long Bahasa C Beserta Fungsi dan Perbedaan Kebutuhannya
5 komentar untuk "Linker Bahasa C dan Fungsinya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa yang dimaksud dengan linker?
BalasHapusDalam dunia komputasi atau pemrograman komputer, linker atau editor link adalah program sistem komputer yang mengambil satu atau lebih objek file yang dihasilkan oleh sebuah kompilator atau assembler dan menggabungkannya menjadi satu file baru yang dapat eksekusi oleh mesin berupa file library, atau file objek lainnya.
HapusApa yang dimaksud dengan linker dan loader pada bahasa C?
BalasHapusLinker merupakan objek yang menggabungkan satu atau lebih objek file beserta beberapa kode library yang diubah menjadi beberapa objek baru atau library baru yang dapat dieksekusi.
HapusSedangkan loader merupakan sebuah pembaca kode program yang kemudian mengeksekusinya ke dalam sebuah memori, juga dapat melakukan beberapa penerjemahan alamat dan dapat menjalankan program ataupun menampilkan pesan kesalahan atau error tertentu.
Linker mengambil masukkan kode dari sebuah objek yang dihasilkan oleh kompilator atau assembler. Sedangkan loader mengambil masukkan daril file yang dapat dieksekusi yang dihasilkan oleh linker.
Hapus