Unix进阶教程 发表于 2010-11-21 17:09

请教关于更新GNU assembler出现的问题

本帖最后由 Unix进阶教程 于 2010-11-21 17:11 编辑

操作系统:Debian 5.0.6
系统自带GNU assembler版本:GNU assembler (GNU Binutils for Debian) 2.18.0.20080103

刚更新了 GCC 4.5.1,准备顺手把 as 一起更新了,于是去 GNU 下载了 binutils-2.20.1.tar.bz2 ,解压、编译一切正常,安装也很正常(至少看起来正常)。
完成之后 $ which as,显示/usr/local/bin/as
然后 $ as --version,赫然显示仍然是旧版本(2.18.0.20080103)
想可能安装出问题了,于是 $ ld --version,显示说明安装正常,是新版本:GNU ld (GNU Binutils) 2.20.1.20100303
不解,于是进源文件目录,发现编译生成一个文件夹 gas ,进入发现有一个 as-new
$ as-new --version,显示:GNU assembler (GNU Binutils) 2.20.1.20100303
更不解,于是 # cp ./as-new /usr/local/bin/as (管理员权限下),没任何显示,应该是复制完成
信心满满地再次 $ as --version,居然仍然是旧版本(2.18.0.20080103)
更加不解,再次 $ which as,仍然显示/usr/local/bin/as
愤怒,于是 # rm /usr/local/bin/as (管理员权限下)
# cp ./as-new /usr/local/bin/as (管理员权限下)
结果……,悲剧就这样诞生了:$ as --version,仍然是旧版本(2.18.0.20080103)
愤怒中又进行了下述操作:
# rm /usr/bin/as (管理员权限下)
# cp ./as-new /usr/bin/as (管理员权限下)
于是,问题神奇地迎刃而解
$ as --version,显示:GNU assembler (GNU Binutils) 2.20.1.20100303
$ which as,显示/usr/local/bin/as

如此神奇的事情实在是不解,求解释。
注:没有 /etc/alternatives/as

EricFisher 发表于 2010-11-21 17:31

见鬼了。我有时会遇到过见鬼的事情。

flw2 发表于 2010-11-21 17:55

1. 显示时old版本就说明执行的是old版本
2. old版本是/usr/bin/as,说明执行的是/usr/bin/as

估计你安装之前运行as,shell找找发现在/usr/bin/as,然后安装新的as之后它保留了as->/usr/bin/as这个关系(否则每运行一次搜索$PATH也够累的,which命令才这么傻),更新之后它没有更新这个关系(实际上shell也确实不知道安装了新版本),而ld能运行正常是因为你在安装后运行的,第一次搜索shell和which是等价的按照$PATH的先后搜,就是/usr/local/bin/ld
页: [1]
查看完整版本: 请教关于更新GNU assembler出现的问题