编译OSSIE(redhawksdr)问题记录

OSSIE是一个开源的SDR软件环境,在GitHub上目前已经更名为redhawksdr, 我从这里下载源码进行编译:
https://github.com/RedhawkSDR/redhawk/releases/download/2.0.5/redhawk-src-2.0.5-2017013.
OSSIE依赖omniORB等库,主要的两个库下载地址为:
https://nchc.dl.sourceforge.net/project/omniorb/omniORBpy/omniORBpy-4.2.2/omniORBpy-4.2.2.tar.bz2
https://nchc.dl.sourceforge.net/project/omniorb/omniORB/omniORB-4.2.2/omniORB-4.2.2.tar.bz2

在编译的时候,主要遇到两个问题,记录如下:

1. undefined reference to

make[2]: Entering directory ‘/home/ygd/redhawk-src-2.0.8/redhawk/src/control/framework’
CXXLD nodeBooter
../../base/framework/idl/.libs/libossieidl.a(libossieidl_la-cfSK.o): In function omniCallDescriptor::omniCallDescriptor(void (*)(omniCallDescriptor*, omniServant*), char const*, unsigned long, bool, char const* const*, int, bool)':
/usr/local/include/omniORB4/callDescriptor.h:95: undefined reference to
omniCallDescriptor::sd_interceptor_call’
/usr/local/include/omniORB4/callDescriptor.h:95: undefined reference to omniCallDescriptor::sd_interceptor_call'
../../base/framework/idl/.libs/libossieidl.a(libossieidl_la-cfSK.o): In function
cdrStream::unmarshalOctet()’:
/usr/local/include/omniORB4/cdrStream.h:145: undefined reference to cdrStream::fetchAndUnmarshalOctet()'
/usr/local/include/omniORB4/cdrStream.h:145: undefined reference to
cdrStream::fetchAndUnmarshalOctet()’
/usr/local/include/omniORB4/cdrStream.h:145: undefined reference to cdrStream::fetchAndUnmarshalOctet()'
/usr/local/include/omniORB4/cdrStream.h:145: undefined reference to
cdrStream::fetchAndUnmarshalOctet()’
../../base/framework/idl/.libs/libossieidl.a(libossieidl_la-cfSK.o): In function cdrStream::unmarshalLong()':
/usr/local/include/omniORB4/cdrStream.h:206: undefined reference to
cdrStream::fetchAndUnmarshalLong()’
/usr/local/include/omniORB4/cdrStream.h:206: undefined reference to cdrStream::fetchAndUnmarshalLong()'
/usr/local/include/omniORB4/cdrStream.h:206: undefined reference to
cdrStream::fetchAndUnmarshalLong()’

研究了一番之后,我觉得原因应该是找不到libomniORB库,可是我明明已经安装到系统/usr/local/lib中了,为什么就是找不到了。最后只能采取如下暴力解决方法:

编译omniORB-4.2.2,复制生成的libomniORB4.a静态库到redhawk-src-2.0.8/redhawk/src/base/framework/idl/libomniORB4.a, 修改makefile文件:redhawk/src/control/framework/Makefile,如下行修改,增加最后一项内容:

nodeBooter_LDADD = ( B O O S T L D F L A G S ) (BOOST_FILESYSTEM_LIB) ( B O O S T S Y S T E M L I B ) . . / p a r s e r / l i b o s s i e p a r s e r . l a . / l i b o s s i e d o m a i n . l a (top_builddir)/base/framework/libossiecf.la ( t o p b u i l d d i r ) / b a s e / f r a m e w o r k / i d l / l i b o s s i e i d l . l a (OMNICOS_LIBS) ( O M N I O R B L I B S ) (top_builddir)/base/framework/idl/libomniORB4.a

这样就解决了引用无定义的问题。

2. error adding symbols: DSO missing from command line

make[2]: Entering directory ‘/home/ygd/redhawk-src-2.0.8/redhawk/src/testing/sdr/dom/components/msg_through_cpp/cpp’
CXX msg_through_cpp-msg_through_cpp.o
CXX msg_through_cpp-msg_through_cpp_base.o
CXX msg_through_cpp-main.o
CXXLD msg_through_cpp
/usr/bin/ld: msg_through_cpp-msg_through_cpp_base.o: undefined reference to symbol ‘_ZN12CosEventComm19PushSupplier_Helper7releaseEPNS_20_objref_PushSupplierE’
//usr/local/lib/libCOS4.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:503: recipe for target ‘msg_through_cpp’ failed
make[2]: * [msg_through_cpp] Error 1
make[2]: Leaving directory ‘/home/ygd/redhawk-src-2.0.8/redhawk/src/testing/sdr/dom/components/msg_through_cpp/cpp’
Makefile:631: recipe for target ‘all-recursive’ failed
make[1]: * [all-recursive] Error 1
make[1]: Leaving directory ‘/home/ygd/redhawk-src-2.0.8/redhawk/src/testing’
Makefile:600: recipe for target ‘all-recursive’ failed
make: * [all-recursive] Error 1

网上查找了一个这个错误的原因,大概意思也是说找不到库文件,于是采用同上的方法尝试一下看看:

同样复制文件到base/framework/libCOS4.a,然后修改makefile文件/home/ygd/redhawk-src-2.0.8/redhawk/src/testing/sdr/dom/components/msg_through_cpp/cpp/Makefile, 修改如下行,增加最后一项:

msg_through_cpp_LDADD = ( C F D I R ) / f r a m e w o r k / l i b o s s i e c f . l a (CFDIR)/framework/idl/libossieidl.la ( P R O J E C T D E P S L I B S ) (BOOST_LDFLAGS) ( B O O S T T H R E A D L I B ) (BOOST_REGEX_LIB) ( B O O S T S Y S T E M L I B ) (INTERFACEDEPS_LIBS) ( O M N I D Y N A M I C L I B S ) (redhawk_LDADD_auto) $(CFDIR)/framework/libCOS4.a

果然又解决问题了。最后编译顺利完成。

猜你喜欢

转载自blog.csdn.net/ygd11/article/details/79447601
今日推荐