Thrift C ++链接器错误(增强智能指针)

时间:2018-08-19 14:43:31

标签: c++ thrift

我正在遵循简单的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而不是{{1}编译的},即使我添加了

boost::smart_pointer

到Thrift库的configure.ac文件。我的编译器没有内置的C ++ 11支持,但支持带有AC_DEFINE([FORCE_BOOST_FUNCTIONAL], [], [Forces boost usage]) AC_DEFINE([FORCE_BOOST_SMART_PTR], [], [Forces boost usage of smart ptrs]) 标志的功能。如何解决此链接器错误?

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

2 个答案:

答案 0 :(得分:0)

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

AX_CXX_COMPILE_STDCXX_11([noext], [optional])

configure.ac文件中的宏。这意味着该库不再使用C ++ 11支持进行编译,并且完全依靠boost::smart_pointer

答案 1 :(得分:0)

@Will Brackenbury

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

  

未定义的参考   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&)'