【问题标题】:Difference between downloading a package and compiling from source下载包和从源代码编译的区别
【发布时间】:2014-10-23 09:56:07
【问题描述】:

在 Ubuntu 14.04.1 中,我试图获取一些第三方库来链接我的 C++ 项目。根据我收集到的信息,获取此类库的方式一般有几种:

(1) 使用 Ubuntu 软件中心下载软件包,

(2) 使用 Aptitude 下载包,

(3) 从存储库(例如 git)下载源代码并从源代码编译,

(4) 下载包含标题和库的压缩文件夹。

我的问题是,如果我使用 (3) 或 (4) 下载和安装,与使用 (1) 或 (2) 下载相比,包管理器 (Aptitude) 会出现什么问题。似乎如果我从源代码编译,或者直接将库下载到压缩文件夹中,那么 Aptitude 将不会意识到这一点。因此,当我随后更新或删除软件包时会出现问题吗?例如,如果我从源代码编译,如何轻松删除所有已编译的库文件(例如 /usr/bin 中的那些),而无需手动搜索所有这些目录并找到它们?如果我从 Aptitude 下载包,那么我可以使用删除整个包

【问题讨论】:

    标签: ubuntu apt dpkg aptitude


    【解决方案1】:

    (1) 和 (2) 之间没有真正的区别,它们只是同一个包装系统的不同接口。我的建议是始终尝试使用包管理器来管理您的软件。 但是,如果您找不到适合您的库的软件包,您可以自己从源代码安装它。这意味着您负责管理它们:更新、删除等。使用 /usr/local 文件夹安装您的库并放置 - “ln -s”是您的朋友 - 任何可执行的二进制文件 /usr/local/bin 或路径中的另一个文件夹。不要使用系统的安装路径,因为这可能会导致以后出现问题。您将能够轻松删除它们而不会产生任何麻烦。

    这里有一个常见问题解答:https://help.ubuntu.com/community/CompilingEasyHowTo

    【讨论】:

      【解决方案2】:

      如果你没有任何依赖问题(即你没有应该链接到你自己编译的库的包),那么 Aptitude 不知道你有什么真的不是问题。

      另一方面,如果您要实现对 Apt 和 dpkg 的依赖,有一个简单的解决方法:在您喜欢的位置安装二进制文件,并创建一个简单的虚拟包,其唯一目的是满足 Aptitude 和 @ 987654324@。 equivs 工具就是为此目的而创建的,但是从头开始创建自己的包也并不难。因此,如果您编译并安装了一些提供libhorror0 功能的文件,请创建一个虚拟包libhorror0 并安装它,以便Apt 不会拉入上游包以满足Depends: libhorror0 的任何包的依赖关系.

      最后,最好的选择可能是真正采取最后的尝试,真正为您的项目创建一个适当的本地.deb 包并将其安装在本地。请注意使用高于上游存储库的官方当前版本但低于下一个官方版本的版本号。 Debian 政策认可的一个常见约定是在版本号上添加~suffix2(其中 2 表示您的第二个版本;下一个应该是~suffix3,依此类推)。所以如果上游是libhorror0-1.23-4,那么你的第二个版本应该是libhorror0-1.23-4~karnivaurus2(或者如果没有上游Debian软件包,使用libhorror0-1.23-0~karnivaurus2)。

      从已经工作的项目中创建一个.deb 包通常一点都不难;只需用必要的文件填充debian 目录(最少rulescontrol,但通常还有版权声明和更改日志以及Debhelper 的一些数据文件);有一个工具dh_make 可以为您完成大部分工作。也许然后甚至提交这个上游,以便任何人都可以直接从上游源构建一个 Debian 包。

      【讨论】:

        猜你喜欢
        • 2017-09-23
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2021-11-08
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        相关资源
        最近更新 更多