Katakanlah userspace saya (paket) dikompilasi dengan gcc 4.7
dan libc6 2.13
(Debian Mengi)
Dapatkah saya mengkompilasi kernel linux di lingkungan dev yang berbeda, seperti gcc 6.3
dan libc6 2.24
(yaitu, di bawah Debian Stretch) ?
Saya tahu bahwa tidak seperti paket, kernel tidak ditautkan dengan pustaka dinamis apa pun. Jadi secara teoritis, seharusnya tidak ada bedanya gcc
. yang mana dan libc
itu dikompilasi di bawah.
Apakah ini benar ?
Bisakah saya mengalami masalah saat melakukan ini ?
Mungkinkah ada beberapa ketidaksesuaian yang disebabkan oleh gcc
yang berbeda versi?
Di sisi lain, gcc
. yang lebih baru memiliki beberapa fitur menarik, keamanan yang lebih baik. Jadi mungkin, kernel harus dikompilasi dengan gcc
terbaru ?
Jawaban yang Diterima:
Seperti yang Anda tunjukkan, pustaka C yang digunakan tidak berdampak pada kernel, kernel tidak menggunakan pustaka C. (Ada dampak tidak langsung, karena ini digunakan untuk membangun alat yang digunakan kernel selama proses pembuatannya, tetapi itu sangat kecil kemungkinannya untuk memengaruhi hasil akhirnya.)
Kernel dapat dibangun dengan berbagai versi kompiler yang berbeda; menurut dokumentasinya, hanya membutuhkan GCC 3.2 atau lebih baru. Anda juga akan menemukan bahwa perlu beberapa saat bagi kernel untuk secara resmi mendukung versi terbaru GCC, dan lebih lama lagi bagi kernel distribusi untuk menggunakannya. Misalnya, paket kernel Debian Linux menggunakan GCC 6, dan bahkan memiliki paket khusus untuk menyediakan versi kompiler yang benar (linux-compiler-gcc-6-x86
di amd64
dan i386
). Tidak ada hubungan antara kompiler yang digunakan untuk kernel dan kompiler yang digunakan untuk ruang pengguna (juga tidak perlu menggunakan kompiler yang sama untuk semua ruang pengguna — program lama yang dibuat dengan GCC 3 atau bahkan 2 masih bekerja pada sistem modern).
Versi kompiler yang lebih baru memang menyediakan lebih banyak fitur keamanan, tetapi GCC 6 cukup baik untuk sebagian besar jika tidak semua fitur keamanan yang digunakan di kernel.