在Fedora24上从Source构建REDHAWK CF

时间:2016-07-25 15:25:14

标签: redhawksdr

我试图在Fedora24机器上从源代码构建REDHAWK CF.我遇到了一些障碍,希望大家可以就以下两个问题提供指导:

1)我克隆了RedhawkSDR/redhawk存储库,并尝试在redhawk.git/redhawk/core/src中构建CF. F24附带GCC6,并基于列出的支持平台(RHEL / CentOS 6系列),我猜测这比上游测试的要先前一点。在我克隆时,core位于cfea23b,标记为v2.0.1。

为了建立它,我必须进行四次更改。后两个我认为是GCC6所需的更改(即gnu-c ++ 14),但我认为无论使用何种C ++标准,都需要前两个。也就是说,这些线路最后一次触及2016年2月 - 因此我担心。我敢打赌,如果它们是真正的错误,现在就会被抓住,这让我相信我做错了什么。

我的变更集如下:

diff --git a/src/control/framework/nodebooter.cpp b/src/control/framework/nodebooter.cpp
index d79c291..dbd97ad 100644
--- a/src/control/framework/nodebooter.cpp
+++ b/src/control/framework/nodebooter.cpp
@@ -141,7 +141,7 @@ void loadPRFExecParams (const std::string& prfFile, ExecParams& execParams)
         prf.load(prfStream);
     } catch (const ossie::parser_error& ex) {
         std::string parser_error_line = ossie::retrieveParserErrorLineNumber(ex.what());
-        LOG_ERROR(nodebooter, "Failed to parse PRF file " << prfStream<< ". " << parser_error_line << "The XML parser returned the following error: " << ex.what());
+        LOG_ERROR(nodebooter, "Failed to parse PRF file " << prfFile<< ". " << parser_error_line << "The XML parser returned the following error: " << ex.what());
         exit(EXIT_FAILURE);
     }
     prfStream.close();
diff --git a/src/control/sdr/dommgr/ApplicationFactory_impl.cpp b/src/control/sdr/dommgr/ApplicationFactory_impl.cpp
index d370519..92699e0 100644
--- a/src/control/sdr/dommgr/ApplicationFactory_impl.cpp
+++ b/src/control/sdr/dommgr/ApplicationFactory_impl.cpp
@@ -194,7 +194,7 @@ void ApplicationFactory_impl::ValidateSPD(CF::FileManager_ptr fileMgr,
                                           const bool require_prf, 
                                           const bool require_scd) {
   SoftPkg pkg;
-  ValidateSPD(fileMgr, pkg, false, false );
+  ValidateSPD(fileMgr, pkg, sfw_profile, require_prf, require_scd);
 }

 void ApplicationFactory_impl::ValidateSPD(CF::FileManager_ptr fileMgr, 
diff --git a/src/control/sdr/dommgr/applicationSupport.cpp b/src/control/sdr/dommgr/applicationSupport.cpp
index 1daa7ce..fbb5ac8 100644
--- a/src/control/sdr/dommgr/applicationSupport.cpp
+++ b/src/control/sdr/dommgr/applicationSupport.cpp
@@ -853,7 +853,7 @@ const bool  ComponentInfo::isScaCompliant()

 bool ComponentInfo::isAssignedToDevice() const
 {
-    return assignedDevice;
+  return static_cast<bool>(assignedDevice);
 }

 bool ComponentInfo::checkStruct(CF::Properties &props)
diff --git a/src/testing/sdr/dev/devices/CppTestDevice/cpp/CppTestDevice.h b/src/testing/sdr/dev/devices/CppTestDevice/cpp/CppTestDevice.h
index 8e1c396..af71c53 100644
--- a/src/testing/sdr/dev/devices/CppTestDevice/cpp/CppTestDevice.h
+++ b/src/testing/sdr/dev/devices/CppTestDevice/cpp/CppTestDevice.h
@@ -28,7 +28,7 @@ class CppTestDevice_i : public CppTestDevice_base
 {
     ENABLE_LOGGING
     public:
-       static const float MAX_LOAD = 4.0;
+       static constexpr float MAX_LOAD = 4.0;

        CppTestDevice_i(char *devMgr_ior, char *id, char *lbl, char *sftwrPrfl);
         CppTestDevice_i(char *devMgr_ior, char *id, char *lbl, char *sftwrPrfl, char *compDev);

2)使用此补丁,我可以构建CF.遗憾的是,运行make test失败并显示以下内容:

cd testing; ./runtests.py
Searching for files in tests/ with prefix test_*.py

Creating the Test Domain

bhilburn22299

R U N N I N G  T E S T S
SDRROOT:  /home/bhilburn/src/redhawk.git/redhawk/core/src/testing/sdr

Loading module tests/test_00_PythonFramework.py
LOADING
Loading module tests/test_00_PythonUtils.py
LOADING
Loading module tests/test_00_ValidateTestDomain.py
LOADING
Loading module tests/test_01_DeviceManager.py
LOADING
Traceback (most recent call last):
  File "./runtests.py", line 231, in <module>
    suite = TestCollector(files, testMethodPrefix=options.prefix, prompt=options.prompt)
  File "./runtests.py", line 112, in __init__
    self.loadTests()
  File "./runtests.py", line 129, in loadTests
    self.addTest(loader.loadTestsFromTestCase(candidate))
  File "./runtests.py", line 104, in loadTestsFromTestCase
    return self.suiteClass(map(testCaseClass, testCaseNames))
  File "/home/bhilburn/src/redhawk.git/redhawk/core/src/testing/_unitTestHelpers/scatest.py", line 328, in __init__
    self._root = self._ns._narrow(CosNaming.NamingContext)
  File "/usr/lib/python2.7/site-packages/omniORB/CORBA.py", line 585, in _narrow
    return self._obj.narrow(repoId, 1)
omniORB.CORBA.TRANSIENT: CORBA.TRANSIENT(omniORB.TRANSIENT_ConnectFailed, CORBA.COMPLETED_NO)
Makefile:1023: recipe for target 'test' failed
make: *** [test] Error 1

根据Installation Instructions,我的赌注是没有正确配置omniORB。但是,我很难搞清楚到底我究竟缺少了什么。我已将更改更改为安装说明中描述的/etc/omniORB.cfg,但当我尝试手动调用cleanomni时,我看到了这一点:

sh: /etc/init.d/omniNames: No such file or directory

我的猜测是,当通过RPM安装CF时,会完成一些额外的配置步骤,这些步骤在安装说明中没有说明。是否有任何文档可以将这些内容细化为更多细节?

1 个答案:

答案 0 :(得分:1)

我还必须在你建议的相同位置修补框架,并采用与你相同的方法。我还必须配置以下内容:

CXXFLAGS='-g -O2 -fpermissive' ./configure --disable-log4cxx

因为我没有log4cxx并且dnf搜索没有找到它。

至于make test调用,你需要运行omniNames来执行我认为的那些。如果安装了omniORB服务器,则应该能够sudo systemctl start omniNames.service。我在Docker镜像中运行,所以我直接用:

启动它

/usr/bin/omniNames -start -always -logdir /var/log/omniORB/ -errlog /var/log/omniORB/error.log

因为我相信我需要做一些额外的工作才能让systemctl在docker中发挥出色。在此之后,单元测试应该运行。虽然我还在$ OSSIEHOME / etc / profile.d中执行了make install并获取了profile.d脚本。当然,我没有安装omniEvents,所以我的内容充满了:

ERROR:DomainManager - Service unvailable, Unable to create event channel: IDM_Channel

关于cleanomni脚本,这个脚本非常依赖于系统,我相信只适用于CentOS6。它应该,停止omni服务,删除“日志”(更像是持久性),然后重新启动它们。根据omniNames的启动/编译方式,每个系统的日志记录目录可能不同。我通常只是手工清理它或者使用bash脚本来停止/清理/启动服务。

经过漫长的等待后,我的单元测试确实完成了以下结果:

Ran 498 tests in 1587.850s FAILED (failures=11, errors=35)

这可能不是一个好的评估;一些测试依赖于omniEvents,一些依赖于像安装valgrind的库,一些需要BULKIO等。所以你的millage可能会因测试结果而异,并且可能需要额外检查以确定故障是否合法。