Thrift C ++链接器错误(提升智能指针)

问题描述 投票:-1回答:2

我正在按照简单的Thrift教程来制作一个简单的部署服务器(在这里找到:https://wiki.apache.org/thrift/ThriftUsageC%2B%2B/)。

然而,尽管完全复制骨架并使用教程链接,我遇到了以下链接器错误,即使在使用-lthrift-L/usr/local/lib与Thrift正确链接之后:

gen-cpp/server.o: In function `main':
/home/will/Documents/Research_2018/Thrift-Javascript-to-CPP/server.cpp:56: 
undefined reference to `apache::thrift::server::TSimpleServer::TSimpleServer
(boost::shared_ptr<apache::thrift::TProcessor> const&, 
boost::shared_ptr<apache::thrift::transport::TServerTransport> const&, 
boost::shared_ptr<apache::thrift::transport::TTransportFactory> const&, 
boost::shared_ptr<apache::thrift::protocol::TProtocolFactory> const&)'
collect2: error: ld returned 1 exit status

我从最新的tarball(版本0.11.0)下载并编译了Thrift。在server.o中比较我的/usr/local/lib文件的目标文件的符号表和Thrift的库文件后,看起来好像Thrift库使用std::smart_pointer而不是boost::smart_pointer编译,即使我添加了

AC_DEFINE([FORCE_BOOST_FUNCTIONAL], [], [Forces boost usage])
AC_DEFINE([FORCE_BOOST_SMART_PTR], [], [Forces boost usage of smart ptrs])

到Thrift库的configure.ac文件。我的编译器没有内置的C ++ 11支持,但它支持std=c++11标志的功能。如何解决此链接器错误?

(检查C++ linker error in Apache Thrift tutorial - undefined symbolsC++ linker error after change in thrift file的问题没有成功)。

c++ thrift
2个回答
0
投票

这个错误的根源是通过std=c++11标志编译我的Thrift库与C ++ 11支持引起了某种混乱。我解决这个问题的方法是删除:

AX_CXX_COMPILE_STDCXX_11([noext], [optional])

configure.ac文件中的宏。这意味着库不再使用C ++ 11支持编译,它完全依赖于boost::smart_pointer


0
投票

@Will Brackenbury

我删除了AX_CXX_COMPILE_STDCXX_11([noext],[可选]),但遇到以下错误

未定义引用`apache :: thrift :: server :: TThreadedServer :: TThreadedServer(std :: shared_ptr const&,std :: shared_ptr const&,std :: shared_ptr const&,std :: shared_ptr const&,std :: shared_ptr const&)'

© www.soinside.com 2019 - 2024. All rights reserved.