【问题标题】:Best way to deal with installing dependencies?处理安装依赖项的最佳方法?
【发布时间】:2013-03-08 20:50:42
【问题描述】:

我有一个分发给客户的库。我正在探索将我的第 3 方依赖项保留为动态链接依赖项的想法。在这种情况下,我的客户的部署变得更加复杂,因为他们必须先安装我的依赖项才能使用我的库。我对此有点陌生,所以我有一个广泛的问题:

假设我所有的客户都在 linux 上,那么简单地将依赖项 .so 文件安装到系统库目录中的 RPM 包是最佳途径吗?从我读到的关于 RPM 的内容来看,这并不是它们的真正用途。我想我正在寻找的是一种 linux 的“安装程序”,但也许这样的东西不存在。

构建一个包含所有相关二进制文件(和许可证,如适用)并提供安装说明的包的最佳方式是什么?

【问题讨论】:

    标签: c++ linux dynamic-linking package-managers


    【解决方案1】:

    您有多种选择:

    • 静态链接(如果正在使用的许可证允许)
    • 支持一系列发行版并为所有发行版提供软件包(可行性取决于您的客户是谁)。对您的客户来说最简单的选择,对您来说却是最复杂的选择。
    • 提供一个安装程序,将您的应用程序安装在 Windows 风格的独立目录结构中(例如 /opt/myapp/home/someuser/myapp)。将共享库放入其中并通过相应设置LD_LIBRARY_PATH 的脚本启动。我已经看到 Loki 游戏、Adobe Reader、Google 地球和其他公司使用了这个选项。

    不要:

    • 提供自定义安装程序,将您的二进制文件和库复制到标准目录结构中。这可能会覆盖您的客户拥有的其他应用所需的特定库版本。由于发行版的包管理不知道这些文件,因此它也会留下一个可怕的混乱。
    • 为每个人提供rpm。在非rpm 发行版上,这将要求您的客户手动转换包以适应他们的包管理系统。

    【讨论】:

    • 感谢您的详尽回答!我有一个跟进:对于选项 2(支持一系列发行版......),这里的包示例是什么?我们是在谈论类似 yum 和 apt-get 这样的包管理器的包之类的东西吗?
    • @Ben 是的,完全正确!例如,您将为 Ubuntu 12.04 和 12.10 提供 deb 软件包,为 RHEL6 和 Fedora 提供 rpms 等...当然,您必须对它们进行测试:)。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 2014-04-11
    • 2012-01-26
    • 2015-05-12
    • 1970-01-01
    • 2015-07-15
    • 2012-09-02
    • 2010-09-23
    相关资源
    最近更新 更多