Kernel

核心是否需要在與使用者空間相同的開發環境中編譯?

  • October 19, 2017

假設我的使用者空間(包)是用gcc 4.7libc6 2.13(Debian Wheezy)編譯的

我可以在不同的開發環境下編譯linux核心嗎,例如gcc 6.3and libc6 2.24(即在Debian Stretch下)?

我知道與包不同,核心沒有與任何動態庫連結。所以理論上,它應該在哪個gcclibc它下編譯沒有區別。

這是真的 ?我這樣做時會遇到麻煩嗎?可能有一些不同gcc版本引起的不兼容嗎?

另一方面,newergcc有一些有趣的功能,更好的安全性。所以也許,核心應該用最新的編譯gcc

正如您所指出的,正在使用的 C 庫對核心沒有影響,核心不使用 C 庫。(存在間接影響,因為它用於建構核心在建構過程中使用的工具,但這極不可能影響最終結果。)

核心可以用多種不同的編譯器版本建構;根據其文件,它只需要 GCC 3.2 或更高版本。您還會發現核心正式支持最新版本的 GCC 可能需要一段時間,而分發核心使用它可能需要更長的時間。例如,Debian Linux 核心包使用 GCC 6,甚至有專門的包來提供正確的編譯器版本(linux-compiler-gcc-6-x86onamd64i386)。用於核心的編譯器和用於使用者空間的編譯器之間沒有任何联系(也不一定需要為所有使用者空間使用相同的編譯器——使用 GCC 3 甚至 2 建構的舊程序仍然可以在現代系統上執行)。

較新的編譯器版本確實提供了更多的安全功能,但 GCC 6 對於核心中使用的大多數安全功能(如果不是全部的話)來說已經足夠了。

引用自:https://unix.stackexchange.com/questions/399069