Compile Troubleshoot
Beberapa troubleshooting yang bisa dicoba ketika meng-compile sebuah source code
Link Errors
Error: -lX11: No such file or directory
Masalah: Error ini muncul ketika linker tidak dapat menemukan library X11, yang biasanya digunakan untuk aplikasi grafis berbasis X Window. Penyebab: Library X11 atau file header-nya tidak ditemukan di lokasi yang tepat. Solusi:
- Periksa bagian pertama dari Makefile yang mendefinisikan LIB, INCLUDE, dan LIBS. Misalnya:
LIB= -L/usr/X11/lib
INCLUDE= -I/usr/X11/include/X11
LIBS= -lX11 -lc -lm
- Jika path yang ada tidak sesuai dengan sistem, ubah path tersebut di Makefile.
- Pastikan file header dan library X11 ada di direktori yang benar, seperti
/usr/X11/libdan/usr/X11/include/X11
Error: Undefined reference to math library functions (e.g., cos)
Masalah: Program membutuhkan library matematika, tetapi library tersebut tidak terlink. Solusi: Tambahkan flag -lm pada bagian LIB atau LIBS di Makefile, agar program dapat menemukan dan menglink library matematika.
Alternatif Jika xmkmf Gagal
Jika xmkmf tidak bekerja dengan baik, coba jalankan perintah berikut:
make -DUseInstalled -I/usr/X386/lib/X11/config
Menjalankan ldconfig
Masalah: Beberapa kali, library yang diperlukan tidak ditemukan karena symbolic links tidak diperbarui. Solusi: Jalankan perintah ldconfig sebagai root untuk memperbarui link library yang dibutuhkan.
# ldconfig
Masalah dengan Versi Library
Masalah: Kadang-kadang, sistem membutuhkan versi library yang lebih lama (misalnya, X11R5) untuk membangun aplikasi. Solusi: Jika menggunakan versi X11R5, pastikan ada symbolic links yang tepat, seperti:
ln -s /usr/X11R6/lib/libX11.so.3.1.0 /usr/X11R6/lib/libX11.so.3
Install dan Perbarui Library
Masalah: Beberapa paket mungkin memerlukan versi library yang lebih baru atau berbeda untuk berfungsi dengan baik. Solusi: Jika menggunakan aplikasi seperti StarOffice yang membutuhkan versi libc tertentu, pastikan untuk menginstal versi yang diperlukan dan memperbarui symbolic links sesuai instruksi. Hati-hati saat mengubah library, karena kesalahan dalam proses ini bisa merusak sistem.
Masalah Lain
Error: No such file or directory pada Skrip Perl atau Shell
Masalah: Ketika menjalankan skrip Perl atau shell, kamu mendapat pesan error No such file or directory. Ini biasanya terjadi ketika file skrip tidak dapat dieksekusi atau program yang dipanggil dalam skrip tidak ditemukan di lokasi yang ditentukan. Penyebab:
- Skrip mungkin memerlukan izin eksekusi.
- Lokasi interpreter yang disebutkan dalam header skrip tidak sesuai dengan lokasi yang benar di sistem.
Solusi:
- Periksa izin file: Pastikan file skrip memiliki izin eksekusi. Untuk memberi izin eksekusi, gunakan perintah:
chmod +x nama_skrip.sh
- Periksa header skrip: Periksa bagian pertama dari skrip yang menunjukkan lokasi interpreter. Misalnya, skrip dapat dimulai dengan:
#!/usr/local/bin/perl
- Jika Perl diinstal di
/usr/bin/perldan bukan di/usr/local/bin/perl, maka kita bisa:- Mengubah header skrip untuk menunjuk ke lokasi yang benar:
#!/usr/bin/perl
- Atau buat symbolic link agar skrip dapat menemukan Perl di lokasi yang benar:
ln -s /usr/bin/perl /usr/local/bin/perl
Ini akan membuat link simbolik di /usr/local/bin/perl yang mengarah ke lokasi /usr/bin/perl.
Kebutuhan Motif Libraries untuk Software X11
Masalah: Beberapa software X11 memerlukan pustaka Motif untuk dibangun. Namun, distribusi Linux standar biasanya tidak menyertakan pustaka Motif, dan Motif dapat berharga sekitar $100-$200. Meskipun ada alternatif gratis seperti Lesstif yang kompatibel dengan banyak aplikasi, masalah ini tetap muncul jika aplikasi membutuhkan pustaka Motif untuk dibangun. Solusi:
- Jika kita tidak memiliki pustaka Motif: Kamu bisa mencoba menggunakan Lesstif, yang merupakan implementasi open-source dari Motif. Instal Lesstif menggunakan perintah:
sudo apt-get install lesstif2
- Atau menggunakan binary statis: Beberapa paket dapat disediakan dalam bentuk binary statis yang sudah mengandung pustaka yang diperlukan. Ini memungkinkan kamu menjalankan program tanpa memerlukan pustaka eksternal, meskipun file binary-nya lebih besar. Jika kamu menggunakan distribusi seperti Ubuntu atau Debian, kamu dapat mencari versi statis dari paket yang diperlukan atau mencari di situs web resmi proyek untuk mendapatkan versi statis.
Skrip Configure Membuat Makefile Aneh
Masalah: Jika menjalankan skrip configure dan hasilnya adalah Makefile yang tampaknya tidak berhubungan dengan paket yang sedang kamu coba bangun, ini bisa berarti skrip configure yang salah telah dijalankan. Skrip configure yang dijalankan mungkin ditemukan di direktori lain yang ada dalam path, bukan dari direktori sumber aplikasi yang sebenarnya. Solusi:
- Gunakan
./configureUntuk memastikan kamu menjalankan skrip configure yang benar, selalu jalankan skrip tersebut dengan perintah:
./configure
- Ini akan memastikan bahwa skrip configure yang benar dijalankan dari direktori tempat paket yang sedang dibangun berada, dan bukan yang ada di direktori lain dalam path sistem.
Masalah dengan Perpustakaan libc 6 / glibc 2 Setelah Pembaruan
Masalah: Banyak distribusi Linux yang telah beralih ke libc 6 atau glibc 2 dari versi yang lebih lama, yaitu libc 5. Biner yang telah dikompilasi untuk libc 5 mungkin gagal jika kamu telah memperbarui pustaka sistem ke versi yang lebih baru. Misalnya, aplikasi yang dibangun dengan glibc 2.0 mungkin tidak bekerja pada sistem dengan glibc 2.1. Solusi:
- Rekompilasi dari Sumber: Jika aplikasi yang dijalankan tidak berfungsi setelah upgrade pustaka, solusinya adalah dengan mengompilasi ulang aplikasi tersebut dari sumbernya dengan pustaka glibc yang baru.
- Dapatkan Biner Terbaru: Jika tidak ingin mengompilasi ulang aplikasi, kita bisa mencari biner yang telah dikompilasi ulang untuk versi glibc yang lebih baru.
- Referensi untuk Upgrade Sistem: Jika kamu sedang dalam proses upgrade sistem ke glibc 6, dan mengalami masalah, kamu bisa merujuk ke Glibc 2 HOWTO oleh Eric Green untuk petunjuk lebih lanjut.
Inkompatibilitas antara Versi glibc
Masalah: Ada beberapa inkompatibilitas kecil antara versi glibc. Biner yang dibangun dengan glibc 2.1 mungkin tidak dapat dijalankan pada sistem yang hanya memiliki glibc 2.0, dan sebaliknya. Solusi: Untuk menghindari masalah ini, pastikan kita menggunakan versi glibc yang kompatibel dengan aplikasi yang sedang kamu jalankan. Jika aplikasi membutuhkan versi tertentu dari glibc, pertimbangkan untuk meng-upgrade atau meng-install versi glibc yang sesuai.
Menghapus Opsi -ansi pada Flag Kompilasi
Masalah: Terkadang, saat mengompilasi aplikasi, file Makefile memiliki opsi -ansi yang diaktifkan dalam flag kompilasi. Opsi ini membatasi penggunaan fitur-fitur tambahan yang tidak standar (non-ANSI) dari GCC. Beberapa aplikasi mungkin memerlukan fitur tambahan ini untuk dibangun dengan benar. Solusi:
- Hapus Opsi -ansi: Jika aplikasi yang sedang dibangun membutuhkan fitur non-ANSI dari GCC, kamu bisa menghapus opsi -ansi dari flag kompilasi di Makefile. Setelah menghapusnya, coba kompilasi ulang aplikasi:
sed -i 's/-ansi//g' Makefile
make