Judulnya mengatakan itu semua, sebenarnya. Tapi izinkan saya untuk menentukan pertanyaannya:
Dengan asumsi saya mengkompilasi aplikasi yang menggunakan libffi, libGL, dlfcn, dan SDL, apakah biner akan berjalan di distribusi Linux lain dengan arsitektur yang sama, dll?
Alasan saya bertanya adalah karena direktori /usr/lib/i386-linux-gnu
– Saya mungkin salah, tetapi saya menganggap direktori ini agak spesifik untuk Ubuntu, bukan?
Jadi, seberapa portabelkah binari dikompilasi di Ubuntu?
Jawaban yang Diterima:
Saat Anda mengkompilasi biner, katakan, nginx
dari kode sumber, itu dibangun dengan informasi mengenai versi perpustakaan apa yang ada di sistem yang mengkompilasi binari. Pustaka untuk referensi tentu saja ditentukan oleh argumen (untuk nginx
, itu definisi modul mana yang mau diaktifkan atau tidak). Tetapi biner yang Anda buat akan (tidak mungkin) berjalan pada sistem yang terpisah, kecuali jika sistem tersebut dikonfigurasi secara identik.
Anda ingin mengompilasi aplikasi pada setiap sistem individual, (relatif) kemungkinan Anda tidak akan dapat mem-porting versi terkompilasi ke sistem lain yang mungkin tidak memiliki versi yang kompatibel untuk setiap perpustakaan.
Catatan:Selagi Anda bisa mendapatkan biner untuk port ke sistem Linux lain, yang keliru dan biasanya memakan waktu. Ini karena:
(1) Anda perlu memastikan sistem tempat Anda akan memindahkan biner menggunakan versi libc
yang sama yang digunakan untuk mengkompilasi biner
(2) Anda perlu memastikan bahwa pustaka yang digunakan dalam program dapat dideteksi dengan mudah di sistem Anda, dan versinya sama (atau kompatibel) seperti yang digunakan untuk membuat program.
…dan tentu saja variabel lain yang perlu dipertimbangkan. Hanya saja dalam jangka panjang lebih mudah untuk mengkompilasi program pada setiap sistem untuk menggunakannya daripada berusaha keras untuk portabilitas.