我感兴趣的是使用比CentOS 6附带的gcc 4.4.7更新的编译器。我需要使用C ++ 11功能,因此需要gcc 4.8+版本。我发现有rpm可以加载包含gcc4.8.2和相关所需库等的devtoolset-2。我可以使用scl enable切换编译器使用,因此不会烧毁我的桥。我加载了这个并尝试使用RedHawk 2.0,看起来很有效,但是升级库的头文件存在问题。从2011年到2009年,RedHawk安装似乎使用了libboost,混合了1.48和1.41。目前的提升是1.60。
当gcc 4.8.4和libboost1.54时,我还在Ubuntu上构建并安装了RedHawk。所以RedHawk显然可以使用更新的gcc和boost,但我担心CentOS 6上的RedHawk二进制文件依赖于boost库版本。而且我没有看到安装新的提升的方法,允许我在devtoolset允许的情况下来回切换。
我是否可能不得不从源代码重建RedHawk 2.0而不是使用rpms如果我切换到更新的提升?
答案 0 :(得分:1)
我相信你需要从源代码构建REDHAWK,如果你打算使用不同版本的boost然后默认安装在系统上。可能有其他方法可以使其工作,但从源代码构建将是最干净,最直接的方法。
为什么这是必要的原因之一是您构建的组件正在编译和链接核心框架。核心框架的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 ++版本。
最后,您可以安装scl版本的g ++,启用它们,并使用以下内容配置和构建具有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)上。