Digamos que mi espacio de usuario (paquetes) está compilado con gcc 4.7
y libc6 2.13
(Debian Wheezy)
¿Puedo compilar el kernel de Linux en un entorno de desarrollo diferente, como gcc 6.3
? y libc6 2.24
(es decir, bajo Debian Stretch) ?
Sé que, a diferencia de los paquetes, el kernel no está vinculado con ninguna biblioteca dinámica. Entonces, teóricamente, no debería hacer ninguna diferencia qué gcc
y libc
fue compilado bajo.
¿Es esto cierto?
¿Podría tener problemas cuando hago esto?
¿Podría haber algunas incompatibilidades causadas por diferentes gcc
versiones?
Por otro lado, el nuevo gcc
tiene algunas características interesantes, mejor seguridad. Entonces, tal vez, el kernel debería compilarse con el gcc
más reciente ?
Respuesta aceptada:
Como señala, la biblioteca C que se utiliza no tiene impacto en el kernel, el kernel no usa la biblioteca C. (Hay un impacto indirecto, ya que se usa para construir herramientas que el kernel usa durante su proceso de construcción, pero es muy poco probable que eso afecte el resultado final).
El núcleo se puede construir con una variedad de versiones de compilador diferentes; según su documentación, solo necesita GCC 3.2 o posterior. También encontrará que puede tomar un tiempo para que el núcleo sea compatible oficialmente con las últimas versiones de GCC, y aún más para que un núcleo de distribución lo use. Por ejemplo, el paquete del kernel de Debian Linux usa GCC 6 e incluso tiene paquetes dedicados para proporcionar la versión correcta del compilador (linux-compiler-gcc-6-x86
en amd64
y i386
). No hay conexión entre el compilador usado para el kernel y el compilador usado para el espacio de usuario (ni hay necesariamente ninguna necesidad de usar el mismo compilador para todo el espacio de usuario; los programas antiguos construidos con GCC 3 o incluso 2 todavía funcionan en sistemas modernos).
Las versiones más recientes del compilador brindan más funciones de seguridad, pero GCC 6 es lo suficientemente bueno para la mayoría, si no para todas, las funciones de seguridad utilizadas en el kernel.