首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的对org::opensplice::core::DWDeleter::DWDeleter的引用

未定义的对org::opensplice::core::DWDeleter::DWDeleter的引用
EN

Stack Overflow用户
提问于 2015-03-30 13:07:26
回答 1查看 1K关注 0票数 1

我是OpenSplice新手,我想从这里编写简单的教程:

https://github.com/PrismTech/dds-tutorial-cpp-ex

我下载了OpenSplice Community并提供了release.com文件。

然后,我克隆了dds教程-cpp-ex git存储库,并尝试构建ch1:

代码语言:javascript
复制
$ 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

不幸的是,有一个对`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来重新构建库,完成后没有出现错误。

为什么我会有这个错误?我怎么才能修好它?

我的系统是Ubuntu14.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

这些错误是:

代码语言:javascript
复制
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&)'

注: Crosspost with (无任何答复):http://forums.opensplice.org/index.php?/topic/2517-undefined-reference-to-orgopensplicecoredwdeleterdwdeleter/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 13:41:05

问题是,包含的库不是在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谢谢你指出这一点!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29347056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档