2012-09-02 115 views
5

我總是使用file命令來檢查文件類型,主要是在編譯新項目以確保一切正常之後。linux命令「file」顯示爲「GNU/Linux 2.6.24」

輸出與此類似下面的東西:

proj_out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x23d9f966854e09d721c6110d505247483dae02fe, stripped 

我的問題是,因爲我的Linux內核更新爲3.0+,爲什麼它仍然顯示其編譯爲較舊版本的Linux?

for GNU/Linux 2.6.24 

它是任何有關file命令或我做任何事情來編譯我的項目,對新的Linux內核?

感謝

+0

什麼版本的Linux頭文件在'/ usr/src/linux'中? – robert

+0

編譯器的輸出不依賴於您使用的內核版本。它完全依賴於你正在使用的編譯器。 – 2012-09-02 13:10:10

+0

看來我在這裏有不同版本的linux: mahdi @ XO0PS:〜$ ls/usr/src/| grep linux linux-headers-2.6.38-14 linux-headers-2.6.38-14-generic-pae linux-headers-2.6.38-8 linux-headers-3.2.0-23 linux-headers -3.2。0-23-generic linux-headers-3.2.0-24 linux-headers-3.2.0-24-generic linux-headers-3.2.0-26 linux-headers-3.2.0-26-generic linux-headers-3.2.0-27 linux-headers-3.2.0-27-generic linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic – mahdi

回答

9

在可執行文件上顯示的內核版本文件與您的系統上安裝的內核無關。它與構建時與程序鏈接的C庫相匹配。

您的C編譯器針對特定的C庫(通常爲glibc)。反過來,C庫的目標是一個內核API(即C庫是爲特定的內核構建的)。這是文件顯示的版本。

您不必擔心文件顯示的內核版本與您計算機上安裝的內核版本之間的不匹配。

@REALFREE:你可以嘗試下面的實驗。也許這將幫助 你這是怎麼回事的把握:

 
$ uname -r 
3.10-2-amd64 
$ gcc -Wall -Werror hello.c -o hello 
$ readelf --notes ./hello 
Displaying notes found at file offset 0x0000021c with length 0x00000020: 
    Owner     Data size  Description 
    GNU     0x00000010  NT_GNU_ABI_TAG (ABI version tag) 
    OS: Linux, ABI: 2.6.32 

有關ABI標籤的信息包含在一個小精靈 段稱爲注:。編譯該程序時,該信息由鏈接器 編寫。它匹配C庫的ABI標籤。

 
$ ldd ./hello 
     linux-vdso.so.1 (0x00007fffd31fe000) 
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f1a465000) 
     /lib64/ld-linux-x86-64.so.2 (0x00007f5f1a827000) 
$ readelf --notes /lib/x86_64-linux-gnu/libc.so.6 
Displaying notes found at file offset 0x00000294 with length 0x00000020: 
    Propriétaire  Taille des données  Description 
    GNU     0x00000010  NT_GNU_ABI_TAG (étiquette de version ABI) 
    OS: Linux, ABI: 2.6.32 

爲了構建C庫,你必須選擇一個內核 版本。在這裏,C庫是爲2.6.32內核編譯的,但是 它也適用於更新的內核。但是,如果程序 在2.6.32以上的內核上運行,則會顯示內核太舊的警告 。

+0

謝謝。這是您提供的完整信息。 – mahdi

+0

我想知道他們爲什麼不同?我遇到了編譯文件使用2.6.24的相同情況,但在機器上安裝的內核版本是3.2.0-52 – REALFREE

2

該版本號是指從glibc的C庫建編譯器是運行在主機上的內核頭文件。從廣義上講,它顯示了可執行文件預期支持的內核級別。

+0

謝謝。所以它與我在我的項目中使用的庫有關,我在這裏沒有任何改變。 – mahdi