从源代码安装的软件会被自动更新覆盖吗?

作为一个例子,我已经从源代码安装了libcurl v7.30,并按照他们的教程进行了操作。
./configure --disable-ipv6 --enable-ares
 make
 make install

在此之前,我已经从官方软件库中安装了libcurl。

如果进行自动更新,会覆盖这个安装吗?如果是的话,从源代码安装的正确方法是什么,以免干扰官方安装。

如果软件包已经安装,是否应该在新安装之前将其删除?

我猜另一种选择是在不同的文件夹中安装,但这样做会如何改变使用方式?(在我的情况下,编译)并且会导致引用问题吗?

1个回答

大部分情况下,从软件仓库安装的软件可以并且有时会覆盖掉通过源代码编译安装的软件。如果你想阻止这种情况发生(即在系统上保留另一个通过源代码构建的版本,并且容易删除),请继续阅读。建议始终设置源代码构建,以便将其安装到不同的目录中。如果你想恢复Ubuntu版本的软件,则运行以下命令。
sudo apt-get install --reinstall libcurl3

首先,你应该阅读源代码的README或INSTALL文件,以了解参数。这样,你就能确切地知道要解析的参数以及应该将其发送到哪个命令。但以下是一种通用的方法,在我(诚然)有限的经验中适用于大多数源代码构建。
从源代码编译
由于最佳实践是使用checkinstall,我们将首先安装它:
sudo apt-get install checkinstall

这将使您在删除已编译的软件包时更加方便,正如apmouse所指出的那样。
很多时候,./configure 的一个参数是 --prefix <directory>,并且使用方法如下:
auto-apt run ./configure --prefix=/opt/libcurl

然后你完成源代码构建的其余步骤。
make
sudo checkinstall

而且执行 make 命令将为您创建目录并安装文件。

删除已构建的软件包

如果您需要删除源文件,只需运行:

sudo dpkg -r libcurl

如果您需要从终端访问文件,则可以参考这个AskUbuntu问题链接(question)了解如何将新路径添加到$PATH变量中的一些建议。

1使用"make install"不是最佳实践:将来很难删除软件。Ubuntu(和Debian)维基建议使用checkinstall代替。 - sorgel
感谢你的提醒,@apmouse。我之前完全不知道那个存在。 - somoso
1似乎在curl中可以使用prefix,如安装说明所述,谢谢。 - Stefan Rogin