我试图在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时,会完成一些额外的配置步骤,这些步骤在安装说明中没有说明。是否有任何文档可以将这些内容细化为更多细节?
答案 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可能会因测试结果而异,并且可能需要额外检查以确定故障是否合法。