Ste*_*ter 1 c++ data-distribution-service opensplice
我是OpenSplice的新手,想从这里编写简单的教程:
https://github.com/PrismTech/dds-tutorial-cpp-ex
我下载了OpenSplice Community Edition并获得了release.com文件.
然后我克隆了dds-tutorial-cpp-ex git存储库并尝试构建ch1:
$ cd ch1
$ cmake .
$ make
Scanning dependencies of target datamodel
[ 11%] Generating gen/TempControl.cpp, gen/TempControl.h, gen/TempControlDcps.cpp, gen/TempControlDcps.h, gen/TempControlDcps_impl.cpp, gen/TempControlDcps_impl.h, gen/TempControlSplDcps.cpp, gen/TempControlSplDcps.h, gen/ccpp_TempControl.h
[ 22%] Building CXX object CMakeFiles/datamodel.dir/gen/TempControl.cpp.o
[ 33%] Building CXX object CMakeFiles/datamodel.dir/gen/TempControlDcps.cpp.o
[ 44%] Building CXX object CMakeFiles/datamodel.dir/gen/TempControlDcps_impl.cpp.o
[ 55%] Building CXX object CMakeFiles/datamodel.dir/gen/TempControlSplDcps.cpp.o
Linking CXX shared library libdatamodel.so
[ 55%] Built target datamodel
Scanning dependencies of target tspub
[ 66%] Building CXX object CMakeFiles/tspub.dir/tspub.cpp.o
[ 77%] Building CXX object CMakeFiles/tspub.dir/util.cpp.o
Linking CXX executable tspub
CMakeFiles/tspub.dir/tspub.cpp.o: In function `dds::pub::detail::DataWriter<tutorial::TempSensorType>::DataWriter(dds::pub::TPublisher<org::opensplice::pub::PublisherDelegate> const&, dds::topic::Topic<tutorial::TempSensorType, dds::topic::detail::Topic> const&, dds::core::TEntityQos<org::opensplice::pub::qos::DataWriterQosImpl> const&, dds::core::status::StatusMask const&)':
/home/user/workspace/HDE/x86_64.linux/include/dcps/C++/isocpp/dds/pub/detail/DataWriter.hpp:241: undefined reference to `org::opensplice::core::DWDeleter::DWDeleter(std::shared_ptr<DDS::Publisher> const&)'
CMakeFiles/tspub.dir/tspub.cpp.o: In function `dds::topic::detail::Topic<tutorial::TempSensorType>::Topic(dds::domain::TDomainParticipant<org::opensplice::domain::DomainParticipantDelegate> const&, std::string const&, std::string const&, dds::core::TEntityQos<org::opensplice::topic::qos::TopicQosImpl> const&, dds::topic::TopicListener<tutorial::TempSensorType>*, dds::core::status::StatusMask const&)':
/home/user/workspace/HDE/x86_64.linux/include/dcps/C++/isocpp/dds/topic/detail/Topic.hpp:87: undefined reference to `org::opensplice::core::TopicDeleter::TopicDeleter(std::shared_ptr<DDS::DomainParticipant> const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [tspub] Error 1
make[1]: *** [CMakeFiles/tspub.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
不幸的是,有一个未定义的引用`org :: opensplice :: core :: DWDeleter :: DWDeleter(std :: shared_ptr const&)
该库libdcpsisocpp.so将添加到链接目标(请参阅https://github.com/PrismTech/dds-tutorial-cpp-ex/blob/master/cmake/FindOpenSplice.cmake#L56),该目标定义此参考.
我已经通过更改到HDE/x86_64.linux/custom_lib文件夹并执行make -f Makefile.Build_DCPS_ISO_Cpp_Lib哪个已完成而没有错误来重建库.
为什么我会收到此错误?我该如何解决?
我的系统是Ubuntu 14.04 amd64.
OpenSplice版本是:OpenSplice HDE版本V6.4.140407OSS适用于x86_64.linux,日期2014-04-15
编辑: OpenSplice中存在同样的问题OpenSplice HDE版本V6.5.0p1适用于x86_64.linux,日期2015-03-19
那里的错误是:
undefined reference to `org::opensplice::core::DRDeleter::DRDeleter(std::shared_ptr<DDS::Subscriber> const&)'
undefined reference to `org::opensplice::core::TopicDeleter::TopicDeleter(std::shared_ptr<DDS::DomainParticipant> const&)'
Run Code Online (Sandbox Code Playgroud)
注意:Crosspost(没有任何答案):http://forums.opensplice.org/index.php?/ topic/2517-undefined -reference-to-orgopensplicecoredwdeleterdwdeleter /
问题是包含的库不是用C++ 11支持构建的,因此它使用Boost共享指针而不是C++ 11,但教程代码不知何故使用C++ 11.
编辑Makefile HDE/x86_64.linux/custom_lib/Makefile.Build_DCPS_ISO_Cpp_Lib并添加-std=c++0x到CPPFLAGS行修复了问题.
(别忘了重新编译make -f Makefile.Build_DCPS_ISO_Cpp_Lib)
@ yasir-majeed感谢您指出这一点!!
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |