【问题标题】:How dependent are RedHawk 2.0 binaries on libboost versions?RedHawk 2.0 二进制文件对 libboost 版本的依赖程度如何?
【发布时间】:2015-12-18 22:06:10
【问题描述】:

我有兴趣使用比 CentOS 6 附带的 gcc 4.4.7 更新的编译器。我需要使用 C++11 功能,因此需要 gcc 4.8+ 版本。我发现有 rpm 可以加载包含 gcc4.8.2 和相关所需库等的 devtoolset-2。我可以使用 scl enable 切换编译器以使用,因此不会烧毁我的网桥。我加载了这个并使用 RedHawk 2.0 进行了尝试,它看起来很有效,但是 boost 库的头文件存在问题。从 2011 年到 2009 年,RedHawk 安装似乎使用混合了 1.48 和 1.41 的 libboost。当前的提升是 1.60。

当有 gcc 4.8.4 和 libboost1.54 时,我还在 Ubuntu 上构建并安装了 RedHawk。所以 RedHawk 显然可以使用较新的 gcc 和 boost,但我担心 CentOS 6 上的 RedHawk 二进制文件依赖于 boost 库版本。而且我看不到安装更新的提升的方法,它允许我在 devtoolset 允许的情况下来回切换。

如果我切换到更新的 boost,我是否可能不得不从源代码重建 RedHawk 2.0,而不是使用 rpms?

【问题讨论】:

    标签: redhawksdr


    【解决方案1】:

    如果您打算使用与系统默认安装的不同版本的 boost,我相信您需要从源代码构建 REDHAWK。可能还有其他方法可以让它工作,但从源代码构建将是最干净、最直接的方法。

    这是必要的原因之一是您构建的组件正在编译和链接核心框架。核心框架的 rpm 安装版本与 boost 的系统安装版本相关联,因此您的组件也与 boost 的系统安装相关联,虽然您可能能够编译和链接到 boost 的第二个版本,但这可能会导致运行时问题很难调试。您可以使用“ldd”确认二进制文件链接到什么。例如,最基本的组件 HardLimit 与 boost 线程、正则表达式、系统、文件系统和序列化相关联。

    为了确认这是可能的,我从源代码构建并安装了最新的 boost (1.60.0),然后能够针对它构建 2.0.0 框架。我将 boost 1.60 库安装到 /usr/local 的默认位置,所以当我配置我的 REDHAWK 源构建时,我提供了:

    ./configure --with-boost=/usr/local --with-boost-libdir=/usr/local/lib
    

    请注意,如果您安装了 xsd 4.0,该框架将声称它需要 3.3。 xsd 4.0 在 2.0 发布之后发布,xsd3.3 从 epel 中删除。要解决这个问题,您可以简单地编辑 configure.ac 文件以不检查特定版本的 xsd 并重新运行 reconf 脚本。 epel 中的 xsd 版本是向后兼容的,可以与 2.0 一起使用。

    我使用系统安装版本的 gcc/g++ 构建了框架。如果您使用 scl 版本的 g++ 构建框架,您需要查看 this ticket

    然后我构建了 bulkio,再次使用与上述相同的配置行,并再次使用系统安装版本的 gcc / g++。

    最后,您可以安装 g++ 的 scl 版本,启用它们,并配置和构建一个支持 c++11 的组件,具体如下:

    ./configure --with-boost=/usr/local --with-boost-libdir=/usr/local/lib CXXFLAGS='-g -O2 -std=c++11'
    

    我选择构建 SigGen,并运行单元测试以确认操作。在运行之前确保您的 boost 库安装在 LD_LIBRARY_PATH(在我的情况下是 /usr/local/lib)上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2020-02-27
      • 2016-05-06
      • 2019-12-25
      • 2022-01-17
      • 1970-01-01
      • 2014-11-13
      相关资源
      最近更新 更多