为什么x86不叫x32?

安装了64位系统后,会多出:program(x86)文件夹,用于存放32位软件。在下载软件时,也会有x86,x64不同版本下载。那么64位系统叫x64,32位系统为什么不叫x32,而是x86呢?

x86,x64,看似写法类似,但实际上代表了完全不同的含义。简单来说,x86指的是cpu的架构,x64是cpu位数。笼统的说,前者代表cpu的逻辑结构,后者是cpu运算能力。除了x86架构的cpu外,还有很多不同架构的cpu,其中最有名的就是IA架构,即intel安腾架构。两者之间的系统、软件不能通用。

而x64的全称叫x86-64,也就是说x64是x86架构的64位cpu。
为什么x86不叫x32?

x86架构中,最早的cpu是16位的,即8086,其前身还有8位的8008和4位的4004,但后两者是另外的架构。后出的80386已经升级到32位。

这样就可以解释开始的问题了。x86是一种架构的命名,代表所有的该架构下的cpu,包括16位,32位,64位,将来也许会有128位。之所以用x86代表32位系统,是一种通俗用法罢了,是不严谨甚至有误的。由于16位cpu早已淘汰不用了,而在64位出来前,32位cpu占据了很长一段时间,所以习惯性的用x86代表32位cpu。而x64是一个简写,告诉大家的是:我是x86架构中的64位cpu。

所以如果严谨的按命名规则来看,现在的x86应该叫x86-32,简称x32。以前16位的8086则应该叫x86-16,简称x16。因此,x86不叫x32,只是一种习称,一种误称。

IA架构下的cpu命名则比较严谨,32位就叫IA32,64就叫IA64。

转载自:http://blog.sina.com.cn/s/blog_6053551a0102x5my.html#commonComment

<think>好的,我现在需要帮助用户解决在启用CONFIG_X86_X32时缺少binutils支持的问题。首先,我需要理解这个问题出现的背景。CONFIG_X86_X32是Linux内核的一个配置选项,它允许内核支持x32 ABI,这是一种混合了x86_64的高效寄存器和32位指针的ABI,旨在减少内存使用并提高性能。然而,当用户启用这个选项后,编译过程中可能会出现缺少binutils支持的错误,这意味着当前的binutils版本可能支持生成x32目标文件所需的工具。 接下来,我需要考虑可能导致这个问题的原因。首先,用户可能没有安装正确版本的binutils,或者安装的版本过旧,支持x32。其次,即使安装了正确版本,系统路径可能没有正确配置,导致编译工具链找到所需的工具如objcopy。另外,可能用户在配置内核时启用了x32,但相关的开发包没有安装,比如gcc的多库支持。 然后,我需要回忆之前处理类似问题的经验。比如在引用[2]中提到,安装ClickHouse时遇到找到objcopy的问题,解决方案是安装正确版本的binutils或者通过Homebrew安装llvm的objcopy。这可能与当前问题类似,因为objcopy是binutils的一部分,用于处理目标文件。因此,用户可能需要更新或安装支持x32的binutils。 接下来,我需要整理解决步骤。首先,检查binutils的版本是否支持x32。用户可以通过运行`objcopy --version`或`ld --version`来查看版本。如果版本低于支持x32的版本(比如2.22以上),则需要升级。在Debian/Ubuntu系统上,可以使用`sudo apt-get install binutils`来升级。对于CentOS/RHEL,可能需要启用EPEL仓库后安装更新版本。 如果升级后问题依旧,可能需要手动编译安装最新版的binutils。下载源码,配置时启用x32支持,然后编译安装。这可能需要一些时间,但能确保获得最新功能。 另外,检查系统路径是否正确。有时候新安装的binutils可能安装在非标准路径,比如`/usr/local/bin`,而系统的PATH变量可能没有包含这个路径。需要确保PATH中包含binutils的安装路径。用户可以通过`echo $PATH`查看,并在shell配置文件(如.bashrc或.zshrc)中添加路径。 还有,检查内核编译环境是否正确配置。在编译内核时,可能需要设置正确的工具链路径,指定使用新安装的binutils。可以通过环境变量如CC、LD来指定编译器或链接器的路径。 此外,参考引用[1]中的情况,当二进制包兼容时,可能需要从源码安装。类似地,如果系统自带的binutils支持x32,用户需要从源码编译安装,并可能使用选项强制使用源码安装,比如使用`-s`参数,但具体到binutils可能需要同的方法。 最后,需要验证解决方案是否有效。完成安装和配置后,重新编译内核,观察是否仍然出现binutils支持的报错。如果没有错误,说明问题解决;如果仍有问题,可能需要进一步检查配置或查看编译日志中的详细错误信息。 总结步骤:升级binutils,确保路径正确,必要时手动编译安装,配置内核编译环境,验证结果。同时,用户可能需要安装其他依赖库或开发包,如gcc的多库支持,这可以通过包管理器安装对应的软件包。</think>### CONFIG_X86_X32启用时缺少binutils支持的解决方案 当启用Linux内核的$CONFIG\_X86\_X32$选项但缺少binutils支持时,通常是由于编译工具链支持x32 ABI导致的。以下是逐步解决方案: --- #### **1. 验证binutils版本** x32 ABI需要binutils ≥ 2.22版本支持。执行以下命令检查当前版本: ```bash ld --version | head -n1 objcopy --version | head -n1 ``` - 若版本低于2.22,需升级binutils: - **Debian/Ubuntu**: ```bash sudo apt-get update && sudo apt-get install binutils ``` - **CentOS/RHEL**: ```bash sudo yum install binutils ``` --- #### **2. 手动编译安装最新binutils** 若包管理器提供的版本过低,需手动编译安装: ```bash wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz tar -xzvf binutils-2.40.tar.gz cd binutils-2.40 ./configure --enable-x86-x32 make -j$(nproc) sudo make install ``` --- #### **3. 配置系统路径** 确保新安装的binutils工具位于系统路径中: ```bash export PATH="/usr/local/bin:$PATH" # 永久生效则添加到~/.bashrc或~/.zshrc ``` --- #### **4. 检查内核编译环境** 在内核源码目录中,清理旧配置并重新生成: ```bash make clean make menuconfig # 确保CONFIG_X86_X32已启用 make -j$(nproc) ``` 若仍报错,显式指定工具链路径: ```bash make LD=/usr/local/bin/ld OBJCOPY=/usr/local/bin/objcopy ``` --- #### **5. 安装多库支持(可选)** 部分系统需安装gcc的多库支持: ```bash # Debian/Ubuntu sudo apt-get install gcc-multilib # CentOS/RHEL sudo yum install glibc-devel.i686 ``` --- #### **6. 验证解决方案** 重新编译内核,观察是否仍提示binutils错误。若问题持续,检查编译日志中具体报错位置[^2]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值