如果我从源代码构建来安装现有库的最新版本,会发生什么?

如果我从源代码构建来安装现有库的最新版本,会发生什么?

我是 Linux 新手,我使用 Synaptic 包管理器来安装我需要的所有软件。我也这样做了mathgl,科学图表库。

最近网上出现了一个新版本,但没有在包管理器中。我下载了源代码并尝试手动安装。说明说:

cmake .
cmake .
make
make install

我做了完全相同的事情,但后来我意识到我忘记了一些构建选项。我在网上搜索如何卸载库,以便我可以使用新设置安装它,但我没有得到明确的答案。我发现,当谈到在 Linux 下卸载时,除非开发人员提供了卸载脚本,否则你只能靠自己,这并不容易。

考虑到这一点,我只是尝试安装该库而不删除配置错误的库。

cmake -D enable-all=on -D enable-langall=on .
cmake -D enable-all=on -D enable-langall=on .
make
make install

一切似乎都很好。我的问题是:我的行为是否可能带来后果并反过来困扰我?

我也很担心,因为旧的库没有被删除,旧的头文件也没有被删除。另一件奇怪的事情是,旧的头文件在

/usr/lib/mgl

而新的

/usr/local/lib/mgl2

对此有什么解释吗?

答案1

我的行为是否会导致后果反过来困扰我?

也许吧。请继续阅读:

  • 新的(“启用…:) 配置的库已经覆盖了新的您安装的配置错误的库...没有造成损害。

  • 新的库安装在/usr/local 因为这是许多 Linux 发行版的默认设置,但是不是Ubuntu;Ubuntu 将它们放在 下/usr。前者适用于二进制文件(/usr/local/bin),Ubuntu 的默认路径中有这些文件,并且这些文件将优先于 中安装的任何二进制文件/usr/bin,但这是不对对于图书馆来说,/usr/local/lib因为不是在默认路径中。

  • 任何使用该库的程序都将继续使用 中的旧标头/版本/usr/lib,除非您明确告诉这些程序使用新标头/版本,例如通过在它们前面加上前缀LD_LIBRARY_PATH=...或明确添加/usr/local/lib到您的路径中。要编译依赖于此库的东西,您需要明确指定/usr/local/lib包含新标头的路径。

  • 修复这个问题:

    1. 删除 repo 安装的库版本是一个好主意,除非它有大量依赖项,在这种情况下保留它(否则您必须重新编译所有内容)。
    2. 安装检查安装,您可以使用它来代替最后make install一步,为您提供易于安装的 deb 文件卸载。
    3. 在编译之前通过指令设置正确的安装前缀-DCMAKE_INSTALL_PREFIX=/usr

那就可以了!

答案2

嗯,新版本使用的是来自的库/usr/local/lib(这是用户安装软件的常用位置)。这其实是件好事,主要目的是不破坏通过包管理器安装的包。
库的位置通常在 Makefile 中定义。我建议不要碰它,除非你知道自己在做什么。自己编译的版本将使用来自的库/usr/local/lib,从 repo 安装的其他版本将使用标准/usr/lib位置。

相关内容