gnu linux 2.6.32,linux命令“file”显示“for GNU / Linux 2.6.24”

搜索热词

@H_404_1@我总是使用file命令来检查文件类型,主要是在我编译一个新项目以确保一切正常之后.

@H_404_1@输出类似于以下内容:

@H_404_1@

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

@H_404_1@我的问题是,因为我的Linux内核已更新到3.0,为什么它仍然显示它是为旧版本的Linux编译的?

@H_404_1@

for GNU/Linux 2.6.24

@H_404_1@它与文件命令有什么关系,还是我必须做任何事情来编译我的项目对新的Linux内核?

@H_404_1@谢谢

最佳答案

文件在可执行文件上显示的内核版本与系统上安装的内核无关.它与程序在构建时链接的C库相匹配.

@H_404_1@您的C编译器针对特定的C库(通常是glibc).反过来,C库以内核API为目标(即C库是为特定内核构建的).这是文件显示的版本.

@H_404_1@您不必担心文件显示的内核版本与计算机上安装的内核版本之间的匹配.

@H_404_1@@REREFREE:您可以尝试以下实验.也许会的

帮助您掌握正在发生的事情:

@H_404_1@

$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

@H_404_1@有关ABI标签的信息包含在精灵中

段称为NOTE.此信息由链接器编写

程序编译时.它匹配C库的ABI标记.

@H_404_1@

$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

@H_404_1@为了构建C库,您必须选择一个内核

版.这里,C库是为2.6.32内核编译的

它也适用于更新的内核.但是,如果该计划

在早于2.6.32的内核上运行,内核太旧了警告

被展示.

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值