如何卸载从源代码编译安装的gcc?

15

如何卸载从源代码编译并安装的gcc版本。我正在使用gcc 4.9,且我的操作系统是ubuntu 12.04。

或者是否有通过Ubuntu软件源升级到最新gcc版本的方法?


我对你想要做什么有一点不太清楚。你需要最新版本的 GCC,但是你构建的那个版本不能用吗?还是你更喜欢使用软件包管理器?或者你从源代码构建的版本是旧版本? - roelofs
从源代码编译最近的GCC实际上是个好主意,但你应该仔细地进行“...../configure”,并给一些“--program-suffix”。 - Basile Starynkevitch
@roelofs,如果您没有使用--prefix参数进行非常奇怪的操作,那么在/usr/local/bin下不太可能有一个目录。 - Jonathan Wakely
一个更好的方法可能是使用新版本——Ubuntu 14.04也是LTS——然后使用gcc维护者准备的PPA来更新到gcc快照。 - Dirk Eddelbuettel
请卸载GCC源代码:http://superuser.com/questions/663788/uninstall-gcc-from-source || http://askubuntu.com/questions/101471/how-to-uninstall-gcc-4-6-2 - Ciro Santilli OurBigBook.com
显示剩余5条评论
7个回答

15

从源代码构建软件包时通常没有魔法卸载方式,但您可以近似实现此功能,感谢这个邮件列表主题

基本上,您应该再次安装到一个临时目录并列出在该目录中创建的所有文件,然后可以通过脚本从主系统中删除所有这些文件。

以下是使用此方法卸载GCC的示例脚本:

make install DESTDIR=/tmp/gccinst
find /tmp/gccinst | sed -e s,/tmp/gccinst,, | \
(while read F; do rm "$F"; done)

以root身份从gcc源代码目录中运行它。

回答你的第二个问题,你可以使用以下命令在Ubuntu仓库中安装最新的gcc:

apt-get install gcc

叠加存储库可能有更新版本。我看到有人建议在 ubuntu-toolchain-r/test 中有一个更新版本(通过安装):

叠加存储库可能有更新版本,我看到有人建议在ubuntu-toolchain-r/test中有一个更新版本(通过安装):

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

但我不确定他们是否已经添加了4.9版本。如果没有,你确实需要从源代码安装。

编辑:

看起来@roelofs在他的答案中找到了更好的安装指南,所以也去看看那里,并记得给他点赞,如果它有帮助的话:)


1
在12.04上,apt-get将安装4.6而不是4.9。 - roelofs
@roelofs 哦,我明白了。我刚刚注意到你的链接有一个更好的安装repo的指南。 - Vality

6
在GCC 5.1.0中,虽然没有顶级的uninstall目标,但是一些目录确实有它,特别是gcc,因此您可以执行以下操作:
cd build/gcc
sudo make uninstall

这并没有移除安装的所有内容,但是它会移除安装在该目录中的主要可执行文件,如gccg++cpp等,因此可能已经足够了。


1
以下是最简单但仍然相当完整的解决方案所需的提示:pushd build && for d in $(ls -d */); do sudo make -C $d uninstall; done && popd - Simon Sobisch

6

Vality有了一个很好的开始


make install DESTDIR=/tmp/gccinst

但是他的清理命令存在一些问题。首先,它将目录传递给rm,包括通常的目录(例如/usr)。我们可以通过-type f来解决这个问题:

find /tmp/gccinst -type f | sed -e s,/tmp/gccinst,, | \
    (while read F; do rm "$F"; done)

去除由此留下的空目录...
find /tmp/gccinst -depth -type d -not -empty | sed -e s,/tmp/gccinst,, | \
    (while read F; do rmdir -p --ignore-fail-on-non-empty "$F"; done)

在CentOS安装中,do rm "$F"由于某种原因无法正常工作...必须使用do unlink "$F"才能使其运行而不出错。 - 1111161171159459134

1

添加到Vality和Ben。如果您从自己的登录shell执行此操作:

find $HOME/tmp/gccinst/ -type f | sed -e s,$HOME/tmp/gccinst,, | (while read F; do rm **-f** "$F" ; done)

需要-f标志,否则脚本可能无法运行,如果存在某些权限问题。

1
/root/ihome3/gcc-4.6.3/gcc-build-4.6.3/gcc
[root@izwz93atpyz gcc]# make uninstall
rm -rf /usr/local/bin/c++
rm -rf /usr/local/bin/g++
rm -rf /usr/local/share/man/man1/g++.1
rm -rf /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.3
rm -rf /usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.6.3
rm -rf /usr/local/bin/gcc
rm -f /usr/local/bin/cpp
if [ x != x ]; then \
  rm -f /usr/local//cpp; \
else true; fi
rm -rf /usr/local/bin/gcov`enter code here`
rm -rf /usr/local/share/man/man1/gcc.1
rm -rf /usr/local/share/man/man1/cpp.1
rm -f /usr/local/share/info/cpp.info* /usr/local/share/info/gcc.info*
rm -f /usr/local/share/info/cppinternals.info* /usr/local/share/info/gccint.info*
[root@izwz93atpalb56zydy9bpyz gcc]# pwd
/root/ihome3/gcc-4.6.3/gcc-build-4.6.3/gcc

0

以下操作是可行的。当您从源代码中制作一个gcc并在gcc-build中进行安装时,它将在源代码的顶部方向生成一个gcc目录。cd $source_code_top/gcc,然后进行卸载。它将从您的Linux系统中清除删除gcc。


-1

12.04版本库中可用的GCC最高版本为4.6。您可以使用软件包管理器安装更新版本,但必须添加PPA。此链接应该会有所帮助,尽管它是针对较旧版本的GCC(但可用于最新版本)。

正如评论者指出的那样,如果您自己构建的GCC版本是使用--prefix参数编译的,则整个安装过程应在该目录下的/usr/local或任何您安装的位置,并且可以被删除。


2
GCC源代码树没有卸载(uninstall)目标可供make使用。 - Basile Starynkevitch
应该使用--prefix而不是--set-prefix,如果使用--prefix=DIR,则整个安装过程都将在DIR目录下完成,而不是/usr/local/bin目录下。 - Jonathan Wakely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接