【问题标题】:Thrift C++ Linker Error (Boost smart pointers)Thrift C++ 链接器错误(Boost 智能指针)
【发布时间】:2018-08-19 14:43:30
【问题描述】:

我正在按照简单的 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 的库文件之后,看起来好像使用 std::smart_pointer 而不是 boost::smart_pointer 编译的 Thrift 库,即使在我添加之后

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


    【解决方案1】:

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

    AX_CXX_COMPILE_STDCXX_11([noext], [optional])
    

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

    【讨论】:

    • 我知道在某一时刻,我必须重建我的 Boost 库才能添加 C++11 支持。也许您的 Boost 库未在启用该支持的情况下编译。
    【解决方案2】:

    @Will Brackenbury

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

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

    【讨论】:

    • 不幸的是,基于此,您似乎没有遇到与我相同的错误。您的库需要std:: 版本的共享指针。我会将这些行放回文件中,然后回顾其他潜在的错误来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多