C++ 处理安装依赖关系的最佳方法?

C++ 处理安装依赖关系的最佳方法?,c++,linux,dynamic-linking,package-managers,C++,Linux,Dynamic Linking,Package Managers,我有一个图书馆,可以分发给我的客户。我正在探索将我的第三方依赖项保留为动态链接依赖项的想法。在这种情况下,我的客户的部署变得更加复杂,因为他们必须先安装我的依赖项,然后才能使用我的库。我对此有点陌生,所以我有一个广泛的问题: 假设我的所有客户都在linux上,那么RPM包是否只是简单地安装了依赖项。那么,将文件放入系统库目录是最好的途径?从我读到的关于RPM的内容来看,这并不是它们真正应该被使用的方式。我想我正在寻找的是一种linux的“安装程序”,但也许这样的东西并不存在 是构建包含所有相关二

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

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


是构建包含所有相关二进制文件(和许可证,如果适用)并包含如何安装说明的软件包的最佳方法?

您有多种选择:

  • 静态链接(如果使用中的许可证允许)
  • 支持一系列发行版,并为所有发行版提供软件包(可行性取决于您的客户是谁)。为客户提供最简单的选择,为您提供最复杂的选择
  • 提供一个安装程序,以Windows风格的自包含目录结构安装应用程序(例如
    /opt/myapp
    /home/someuser/myapp
    )。将共享库放入其中,并通过相应设置了
    LD\u LIBRARY\u PATH
    的脚本启动。我见过Loki games、AdobeReader、GoogleEarth和其他公司使用这个选项
不要:

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

您有多种选择:

  • 静态链接(如果使用中的许可证允许)
  • 支持一系列发行版,并为所有发行版提供软件包(可行性取决于您的客户是谁)。为客户提供最简单的选择,为您提供最复杂的选择
  • 提供一个安装程序,以Windows风格的自包含目录结构安装应用程序(例如
    /opt/myapp
    /home/someuser/myapp
    )。将共享库放入其中,并通过相应设置了
    LD\u LIBRARY\u PATH
    的脚本启动。我见过Loki games、AdobeReader、GoogleEarth和其他公司使用这个选项
不要:

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

感谢您的详尽回答!我有一个后续问题:对于选项2(支持一系列发行版…),这里的包示例是什么?我们是在谈论像百胜和apt get这样的软件包经理的软件包吗?@Ben是的,没错!例如,您将为Ubuntu 12.04和12.10提供
deb
包,为RHEL6和Fedora提供
rpm
s包,等等。。。当然,你必须测试它们:)。谢谢你的详尽回答!我有一个后续问题:对于选项2(支持一系列发行版…),这里的包示例是什么?我们是在谈论像百胜和apt get这样的软件包经理的软件包吗?@Ben是的,没错!例如,您将为Ubuntu 12.04和12.10提供
deb
包,为RHEL6和Fedora提供
rpm
s包,等等。。。当然,您必须测试它们:)。