gpt4 book ai didi

c++ - 如何在 RHEL 上为新的 Boost 版本构建/部署 RPM?

转载 作者:IT王子 更新时间:2023-10-29 01:22:16 25 4
gpt4 key购买 nike

我在一个由 10 多个开发人员组成的团队中工作,我们将 RHEL 6.4 用于我们的开发机器和我们的服务器(部署我们的软件的地方)。

RHEL 6.4 附带 Boost 1.41,但我需要至少包含 1.47 的修复程序。我想升级到最新版本(目前是 1.56)。

它不像下载源代码和构建/安装那么容易,因为:

  • 我希望我们团队中的每个人(包括 future 的团队成员)都能轻松访问新的 Boost 版本。要求每个人构建/安装很麻烦,而且可能会出现不一致。
  • 我们的软件部署为安装在数百台服务器上的 RPM(这些服务器归其他团队所有,不受我们控制)。这些也在运行 RHEL 6.4。我们的软件(大概)需要在所有这些机器上运行时链接到新的 Boost 共享库。

更糟糕的是,RedHat 似乎有自己专有的方式将 Boost 软件/库捆绑/打包到 RPM 中。他们不仅有一个 RPM,还有一系列更小的 RPM:

$ yum list installed|grep boost
boost.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-date-time.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-devel.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-filesystem.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-graph.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-iostreams.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-program-options.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-python.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-regex.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-serialization.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-signals.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-system.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-test.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-thread.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-wave.x86_64 1.41.0-11.el6_1.2 @Workstation

我一直在谷歌搜索,找不到简单的解决方案。在 RPM 方面,我还是个新手。

在我们的情况下如何构建/部署 Boost 1.56 作为 RPM?

最佳答案

Sam 发布了一般策略(有效):从 Fedora 20 下载 Boost 1.54 源 RPM 并根据我的目的对其进行修改。

以下是我必须如何编辑 boost.spec 文件以将 RPM 重命名为 jason-boost* 并安装在/opt/install/thirdparty 下的额外详细信息。

  1. 将 boost.spec 重命名为 jason-boost.spec。接下来,按如下方式编辑 jason-boost.spec。
  2. 将宏从 /usr(默认)重新定义为 /opt/install/thirdparty。添加到文件顶部:

    # Override installation dirs. We don't want things to go into
    # /usr (default) because they would overwrite the system Boost
    # library.
    %define _prefix /opt/install/thirdparty
    %define _defaultdocdir /opt/install/thirdparty/share/doc
    %define _mandir /opt/install/thirdparty/share/man
  3. 名称从“boost”更改为“jason-boost”

  4. Summary 更改为“TBS LTE 升级版 Boost 库(无变化)”
  5. 更改toplev_dirname

    • 来自:

      %define toplev_dirname %{name}_%{version_enc}
    • 收件人:

      %define toplev_dirname boost_%{version_enc}
  6. 更改Source0

    • 来自:

      Source0: http://downloads.sourceforge.net/%{name}/%{toplev_dirname}.tar.bz2
    • 收件人:

      Source0: http://downloads.sourceforge.net/boost/boost_1_54_0.tar.bz2
  7. 将“boost”子包重命名为“jason-boost”

    • 例如

      • 来自:

        Requires: boost-atomic = %{version}-%{release} 
      • 收件人:

        Requires: jason-boost-atomic = %{version}-%{release} 
    • 例如

      • 来自:

        Requires: boost = %{version}-%{release} 
      • 收件人:

        Requires: jason-boost = %{version}-%{release} 
  8. 添加--prefix=/opt/install/thirdpartybootstrap.sh选项

    • 来自:

      ./bootstrap.sh --with-toolset=gcc --with-icu
    • 收件人:

      ./bootstrap.sh --with-toolset=gcc --with-icu --prefix=/opt/install/thirdparty
  9. 改变

    • 来自:

      %{_includedir}/%{name} 
    • 收件人:

      %{_includedir}/boost
  10. 在不使用 python3、mpich 或 openmpi 的情况下构建 RPM。 Python3 在 RHEL 6.4 下不容易获得,mpich 和 openmpi 有各种其他编译问题。

    rpmbuild -ba jason-boost.spec --without python3 --without mpich --without openmpi

关于c++ - 如何在 RHEL 上为新的 Boost 版本构建/部署 RPM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com