在C ++中使用第三方库时的链接器错误

时间:2019-02-22 21:55:56

标签: c++ cmake g++

我正在尝试安装rpclib并将其用于我的项目中。我使用指令here安装了该库,安装后,可以在/usr/local/include中看到头文件,在librpc.a中看到一个/usr/local/lib文件。但是,当我尝试编译以下代码时:

#include <iostream>
#include <rpc/server.h>

int main(){
    rpc::server srv(8080);

    return 0;
}

它给了我以下错误:

Undefined symbols for architecture x86_64:
  "rpc::server::server(unsigned short)", referenced from:
      _main in ccRtP1PN.o
  "rpc::server::~server()", referenced from:
      _main in ccRtP1PN.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

如果我不调用rpc::server srv(8080);,则可以正确编译程序(编译器可以找到头文件!)。我正在使用以下程序编译程序:

g++ main.cpp

我也尝试过:

g++ main.cpp -L /usr/local/lib

他们给我同样的错误。我的系统环境如下:

操作系统:macOS 10.14.3
CMake: v3.13.4
g ++(GCC): v8.1.0

我知道链接器找不到函数的定义是一个问题。但是听起来源文件和头文件在正确的位置。我尝试将#include <rpc/server.h>替换为#include "rpc/server.h"。我还尝试了几次卸载并安装它。但是问题仍然存在。

有人可以帮我弄清楚如何解决此问题吗?非常感谢!

更新

我尝试使用以下命令链接librpc

g++ main.cpp -lrpc

它给了我以下错误:

Undefined symbols for architecture x86_64:
  "std::__1::error_category::equivalent(std::__1::error_code const&, int) const", referenced from:
      vtable for clmdep_asio::detail::system_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::misc_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::detail::system_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server_session.cc.o)
      ...
  "std::__1::error_category::equivalent(int, std::__1::error_condition const&) const", referenced from:
      vtable for clmdep_asio::detail::system_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::misc_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::detail::system_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server_session.cc.o)
      ...
  "std::__1::error_category::default_error_condition(int) const", referenced from:
      vtable for clmdep_asio::detail::system_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::error::detail::misc_category in librpc.a(server.cc.o)
      vtable for clmdep_asio::detail::system_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::netdb_category in librpc.a(server_session.cc.o)
      vtable for clmdep_asio::error::detail::addrinfo_category in librpc.a(server_session.cc.o)
      ...
  "std::__1::__shared_weak_count::__get_deleter(std::type_info const&) const", referenced from:
      vtable for std::__1::__shared_ptr_emplace<rpc::detail::server_session, std::__1::allocator<rpc::detail::server_session> > in librpc.a(server.cc.o)
      vtable for std::__1::__shared_ptr_emplace<rpc::detail::dispatcher, std::__1::allocator<rpc::detail::dispatcher> > in librpc.a(server.cc.o)
      vtable for std::__1::__shared_ptr_emplace<clmdep_msgpack::v1::object_handle, std::__1::allocator<clmdep_msgpack::v1::object_handle> > in librpc.a(dispatcher.cc.o)
      vtable for std::__1::__shared_ptr_emplace<clmdep_msgpack::v1::object_handle, std::__1::allocator<clmdep_msgpack::v1::object_handle> > in librpc.a(response.cc.o)
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      void std::__1::vector<std::__1::shared_ptr<rpc::detail::server_session>, std::__1::allocator<std::__1::shared_ptr<rpc::detail::server_session> > >::__push_back_slow_path<std::__1::shared_ptr<rpc::detail::server_session> const&>(std::__1::shared_ptr<rpc::detail::server_session> const&) in librpc.a(server.cc.o)
      void std::__1::vector<std::__1::thread, std::__1::allocator<std::__1::thread> >::__push_back_slow_path<std::__1::thread>(std::__1::thread&&) in librpc.a(server.cc.o)
      void std::__1::vector<clmdep_msgpack::v2::object*, std::__1::allocator<clmdep_msgpack::v2::object*> >::__push_back_slow_path<clmdep_msgpack::v2::object*>(clmdep_msgpack::v2::object*&&) in librpc.a(server_session.cc.o)
      void std::__1::vector<clmdep_msgpack::v2::object*, std::__1::allocator<clmdep_msgpack::v2::object*> >::__push_back_slow_path<clmdep_msgpack::v2::object* const&>(clmdep_msgpack::v2::object* const&) in librpc.a(server_session.cc.o)
      void std::__1::vector<clmdep_msgpack::v2::detail::context<clmdep_msgpack::v2::unpacker>::unpack_stack::stack_elem, std::__1::allocator<clmdep_msgpack::v2::detail::context<clmdep_msgpack::v2::unpacker>::unpack_stack::stack_elem> >::__push_back_slow_path<clmdep_msgpack::v2::detail::context<clmdep_msgpack::v2::unpacker>::unpack_stack::stack_elem>(clmdep_msgpack::v2::detail::context<clmdep_msgpack::v2::unpacker>::unpack_stack::stack_elem&&) in librpc.a(server_session.cc.o)
      std::__1::vector<clmdep_msgpack::v2::object*, std::__1::allocator<clmdep_msgpack::v2::object*> >::__append(unsigned long) in librpc.a(server_session.cc.o)
      void std::__1::vector<clmdep_msgpack::v2::object*, std::__1::allocator<clmdep_msgpack::v2::object*> >::__push_back_slow_path<clmdep_msgpack::v2::object*>(clmdep_msgpack::v2::object*&&) in librpc.a(dispatcher.cc.o)
      ...
  "std::logic_error::logic_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      rpc::detail::dispatcher::enforce_unique_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in librpc.a(dispatcher.cc.o)
  "std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      clmdep_fmt::SystemError::init(int, clmdep_fmt::BasicCStringRef<char>, clmdep_fmt::ArgList) in librpc.a(format.cc.o)
  "std::__1::bad_weak_ptr::~bad_weak_ptr()", referenced from:
      __ZNSt3__110shared_ptrIN3rpc6detail12async_writerEEC2IS3_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS7_PS3_EE5valueENS4_5__natEE4typeE in librpc.a(server_session.cc.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
      clmdep_asio::detail::system_category::message(int) const in librpc.a(server.cc.o)
      clmdep_asio::error::detail::netdb_category::message(int) const in librpc.a(server.cc.o)
      clmdep_asio::error::detail::addrinfo_category::message(int) const in librpc.a(server.cc.o)
      clmdep_asio::error::detail::misc_category::message(int) const in librpc.a(server.cc.o)
      rpc::server::async_run(unsigned long)::$_0::operator()() const in librpc.a(server.cc.o)
      clmdep_asio::detail::system_category::message(int) const in librpc.a(server_session.cc.o)
      clmdep_asio::error::detail::netdb_category::message(int) const in librpc.a(server_session.cc.o)
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long)", referenced from:
      clmdep_msgpack::v1::adaptor::convert<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void>::operator()(clmdep_msgpack::v2::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) const in librpc.a(dispatcher.cc.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
      std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::function<std::__1::unique_ptr<clmdep_msgpack::v1::object_handle, std::__1::default_delete<clmdep_msgpack::v1::object_handle> > (clmdep_msgpack::v2::object const&)> >::~pair() in librpc.a(server.cc.o)
      rpc::server::async_run(unsigned long)::$_0::operator()() const in librpc.a(server.cc.o)
      rpc::detail::dispatcher::dispatch_call(clmdep_msgpack::v2::object const&, bool) in librpc.a(dispatcher.cc.o)
      rpc::detail::dispatcher::enforce_arg_count(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long) in librpc.a(dispatcher.cc.o)
      rpc::detail::dispatcher::enforce_unique_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in librpc.a(dispatcher.cc.o)
      std::__1::__tuple_leaf<2ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::~__tuple_leaf() in librpc.a(dispatcher.cc.o)
      std::__1::__tuple_leaf<1ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::~__tuple_leaf() in librpc.a(dispatcher.cc.o)
      ...
  "std::__1::system_error::system_error(std::__1::error_code)", referenced from:
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&) in librpc.a(server.cc.o)
  "std::__1::system_error::system_error(std::__1::error_code, char const*)", referenced from:
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&, char const*) in librpc.a(server.cc.o)
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&, char const*) in librpc.a(server_session.cc.o)
  "std::__1::system_error::~system_error()", referenced from:
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&, char const*) in librpc.a(server.cc.o)
      void clmdep_asio::detail::throw_exception<std::__1::system_error>(std::__1::system_error const&) in librpc.a(server.cc.o)
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&) in librpc.a(server.cc.o)
      clmdep_asio::detail::do_throw_error(std::__1::error_code const&, char const*) in librpc.a(server_session.cc.o)
      void clmdep_asio::detail::throw_exception<std::__1::system_error>(std::__1::system_error const&) in librpc.a(server_session.cc.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::write(char const*, long)", referenced from:
      clmdep_fmt::print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, clmdep_fmt::BasicCStringRef<char>, clmdep_fmt::ArgList) in librpc.a(format.cc.o)
  "std::__1::error_category::~error_category()", referenced from:
      clmdep_asio::detail::system_category::~system_category() in librpc.a(server.cc.o)
      clmdep_asio::error::detail::netdb_category::~netdb_category() in librpc.a(server.cc.o)
      clmdep_asio::error::detail::addrinfo_category::~addrinfo_category() in librpc.a(server.cc.o)
      clmdep_asio::error::detail::misc_category::~misc_category() in librpc.a(server.cc.o)
      clmdep_asio::detail::system_category::~system_category() in librpc.a(server_session.cc.o)
      clmdep_asio::error::detail::netdb_category::~netdb_category() in librpc.a(server_session.cc.o)
      clmdep_asio::error::detail::addrinfo_category::~addrinfo_category() in librpc.a(server_session.cc.o)
      ...
  "std::__1::__thread_struct::__thread_struct()", referenced from:
      std::__1::thread::thread<std::__1::function<void ()>&, , void>(std::__1::function<void ()>&) in librpc.a(server.cc.o)
  "std::__1::__thread_struct::~__thread_struct()", referenced from:
      std::__1::thread::thread<std::__1::function<void ()>&, , void>(std::__1::function<void ()>&) in librpc.a(server.cc.o)
      std::__1::__tuple_leaf<0ul, std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, false>::~__tuple_leaf() in librpc.a(server.cc.o)
  "std::__1::system_category()", referenced from:
      clmdep_asio::io_service::run()      in librpc.a(server.cc.o)
      clmdep_asio::detail::task_io_service_operation::destroy()     in librpc.a(server.cc.o)
      clmdep_asio::basic_socket_acceptor<clmdep_asio::ip::tcp, clmdep_asio::socket_acceptor_service<clmdep_asio::ip::tcp> >::basic_socket_acceptor(clmdep_asio::io_service&, clmdep_asio::ip::basic_endpoint<clmdep_asio::ip::tcp> const&, bool) in librpc.a(server.cc.o)
      clmdep_asio::detail::reactive_socket_service_base::do_open(clmdep_asio::detail::reactive_socket_service_base::base_implementation_type&, int, int, int, std::__1::error_code&) in librpc.a(server.cc.o)
      clmdep_asio::detail::socket_holder::~socket_holder() in librpc.a(server.cc.o)
      clmdep_asio::detail::socket_ops::close(int, unsigned char&, bool, std::__1::error_code&) in librpc.a(server.cc.o)
      clmdep_asio::detail::socket_ops::setsockopt(int, unsigned char&, int, int, void const*, unsigned long, std::__1::error_code&) in librpc.a(server.cc.o)
      ...
  "std::__1::condition_variable::~condition_variable()", referenced from:
      rpc::detail::async_writer::~async_writer() in librpc.a(server.cc.o)
      rpc::detail::async_writer::~async_writer() in librpc.a(server_session.cc.o)
  "std::__1::__shared_weak_count::__release_weak()", referenced from:
      std::__1::weak_ptr<rpc::detail::async_writer>::~weak_ptr() in librpc.a(server.cc.o)
      std::__1::shared_ptr<rpc::detail::async_writer>::~shared_ptr() in librpc.a(server.cc.o)
      std::__1::shared_ptr<rpc::detail::server_session>::~shared_ptr() in librpc.a(server.cc.o)
      std::__1::shared_ptr<rpc::detail::dispatcher>::~shared_ptr() in librpc.a(server.cc.o)
      std::__1::weak_ptr<rpc::detail::async_writer>::~weak_ptr() in librpc.a(server_session.cc.o)
      std::__1::shared_ptr<rpc::detail::dispatcher>::~shared_ptr() in librpc.a(server_session.cc.o)
      std::__1::shared_ptr<rpc::detail::async_writer>::~shared_ptr() in librpc.a(server_session.cc.o)
      ...
  "std::__1::__shared_weak_count::lock()", referenced from:
      __ZNSt3__110shared_ptrIN3rpc6detail12async_writerEEC2IS3_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS7_PS3_EE5valueENS4_5__natEE4typeE in librpc.a(server_session.cc.o)
  "std::__1::__shared_weak_count::~__shared_weak_count()", referenced from:
      std::__1::shared_ptr<rpc::detail::server_session> std::__1::shared_ptr<rpc::detail::server_session>::make_shared<rpc::server*&, clmdep_asio::io_service*, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&>(rpc::server*&, clmdep_asio::io_service*&&, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >&&, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&) in librpc.a(server.cc.o)
      std::__1::__shared_ptr_emplace<rpc::detail::server_session, std::__1::allocator<rpc::detail::server_session> >::~__shared_ptr_emplace() in librpc.a(server.cc.o)
      std::__1::__shared_ptr_emplace<rpc::detail::dispatcher, std::__1::allocator<rpc::detail::dispatcher> >::~__shared_ptr_emplace() in librpc.a(server.cc.o)
      std::__1::__shared_ptr_pointer<clmdep_msgpack::v1::zone*, std::__1::default_delete<clmdep_msgpack::v1::zone>, std::__1::allocator<clmdep_msgpack::v1::zone> >::~__shared_ptr_pointer() in librpc.a(server_session.cc.o)
      std::__1::__shared_ptr_pointer<clmdep_msgpack::v1::object_handle*, std::__1::default_delete<clmdep_msgpack::v1::object_handle>, std::__1::allocator<clmdep_msgpack::v1::object_handle> >::~__shared_ptr_pointer() in librpc.a(dispatcher.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> > >(clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> >&&) in librpc.a(dispatcher.cc.o)
      std::__1::__shared_ptr_emplace<clmdep_msgpack::v1::object_handle, std::__1::allocator<clmdep_msgpack::v1::object_handle> >::~__shared_ptr_emplace() in librpc.a(dispatcher.cc.o)
      ...
  "std::__1::__thread_local_data()", referenced from:
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, std::__1::function<void ()> > >(void*) in librpc.a(server.cc.o)
  "std::__1::__throw_system_error(int, char const*)", referenced from:
      std::__1::thread::thread<std::__1::function<void ()>&, , void>(std::__1::function<void ()>&) in librpc.a(server.cc.o)
  "std::__1::mutex::~mutex()", referenced from:
      rpc::detail::async_writer::~async_writer() in librpc.a(server.cc.o)
      rpc::detail::async_writer::~async_writer() in librpc.a(server_session.cc.o)
  "std::__1::thread::join()", referenced from:
      rpc::detail::thread_group::join_all()    in librpc.a(server.cc.o)
  "std::__1::thread::~thread()", referenced from:
      rpc::detail::thread_group::create_threads(unsigned long, std::__1::function<void ()>) in librpc.a(server.cc.o)
      std::__1::__split_buffer<std::__1::thread, std::__1::allocator<std::__1::thread>&>::~__split_buffer() in librpc.a(server.cc.o)
      std::__1::__vector_base<std::__1::thread, std::__1::allocator<std::__1::thread> >::~__vector_base() in librpc.a(server.cc.o)
  "std::bad_cast::bad_cast()", referenced from:
      clmdep_asio::ip::address::to_v4() const in librpc.a(server.cc.o)
      clmdep_asio::ip::address::to_v6() const in librpc.a(server.cc.o)
  "std::bad_cast::bad_cast()", referenced from:
      clmdep_msgpack::v1::type_error::type_error() in librpc.a(dispatcher.cc.o)
      clmdep_msgpack::v1::type_error::type_error() in librpc.a(response.cc.o)
  "std::bad_alloc::bad_alloc()", referenced from:
      clmdep_msgpack::v2::parser<clmdep_msgpack::v2::unpacker, clmdep_msgpack::v2::zone_push_finalizer>::parser(clmdep_msgpack::v2::zone_push_finalizer&, unsigned long) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v1::zone::operator new(unsigned long) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v1::zone::chunk_list::chunk_list(unsigned long) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v1::sbuffer::sbuffer(unsigned long) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v2::parser<clmdep_msgpack::v2::unpacker, clmdep_msgpack::v2::zone_push_finalizer>::expand_buffer(unsigned long) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in librpc.a(server_session.cc.o)
      clmdep_msgpack::v1::zone::allocate_expand(unsigned long) in librpc.a(server_session.cc.o)
      ...
  "typeinfo for std::__1::bad_weak_ptr", referenced from:
      __ZNSt3__110shared_ptrIN3rpc6detail12async_writerEEC2IS3_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS7_PS3_EE5valueENS4_5__natEE4typeE in librpc.a(server_session.cc.o)
  "typeinfo for std::__1::system_error", referenced from:
      void clmdep_asio::detail::throw_exception<std::__1::system_error>(std::__1::system_error const&) in librpc.a(server.cc.o)
      void clmdep_asio::detail::throw_exception<std::__1::system_error>(std::__1::system_error const&) in librpc.a(server_session.cc.o)
      GCC_except_table835 in librpc.a(server_session.cc.o)
  "typeinfo for std::__1::error_category", referenced from:
      typeinfo for clmdep_asio::detail::system_category in librpc.a(server.cc.o)
      typeinfo for clmdep_asio::error::detail::netdb_category in librpc.a(server.cc.o)
      typeinfo for clmdep_asio::error::detail::addrinfo_category in librpc.a(server.cc.o)
      typeinfo for clmdep_asio::error::detail::misc_category in librpc.a(server.cc.o)
      typeinfo for clmdep_asio::detail::system_category in librpc.a(server_session.cc.o)
      typeinfo for clmdep_asio::error::detail::netdb_category in librpc.a(server_session.cc.o)
      typeinfo for clmdep_asio::error::detail::addrinfo_category in librpc.a(server_session.cc.o)
      ...
  "typeinfo for std::__1::__shared_weak_count", referenced from:
      typeinfo for std::__1::__shared_ptr_emplace<rpc::detail::server_session, std::__1::allocator<rpc::detail::server_session> > in librpc.a(server.cc.o)
      typeinfo for std::__1::__shared_ptr_emplace<rpc::detail::dispatcher, std::__1::allocator<rpc::detail::dispatcher> > in librpc.a(server.cc.o)
      typeinfo for std::__1::__shared_ptr_pointer<clmdep_msgpack::v1::zone*, std::__1::default_delete<clmdep_msgpack::v1::zone>, std::__1::allocator<clmdep_msgpack::v1::zone> > in librpc.a(server_session.cc.o)
      typeinfo for std::__1::__shared_ptr_pointer<clmdep_msgpack::v1::object_handle*, std::__1::default_delete<clmdep_msgpack::v1::object_handle>, std::__1::allocator<clmdep_msgpack::v1::object_handle> > in librpc.a(dispatcher.cc.o)
      typeinfo for std::__1::__shared_ptr_emplace<clmdep_msgpack::v1::object_handle, std::__1::allocator<clmdep_msgpack::v1::object_handle> > in librpc.a(dispatcher.cc.o)
      typeinfo for std::__1::__shared_ptr_emplace<clmdep_msgpack::v1::object_handle, std::__1::allocator<clmdep_msgpack::v1::object_handle> > in librpc.a(response.cc.o)
  "vtable for std::__1::bad_weak_ptr", referenced from:
      std::__1::bad_weak_ptr::bad_weak_ptr() in librpc.a(server_session.cc.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::system_error", referenced from:
      std::__1::system_error::system_error(std::__1::system_error const&) in librpc.a(server.cc.o)
      std::__1::system_error::system_error(std::__1::system_error const&) in librpc.a(server_session.cc.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::__shared_count", referenced from:
      std::__1::shared_ptr<rpc::detail::server_session> std::__1::shared_ptr<rpc::detail::server_session>::make_shared<rpc::server*&, clmdep_asio::io_service*, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&>(rpc::server*&, clmdep_asio::io_service*&&, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >&&, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&) in librpc.a(server.cc.o)
      std::__1::shared_ptr<rpc::detail::dispatcher> std::__1::shared_ptr<rpc::detail::dispatcher>::make_shared<>() in librpc.a(server.cc.o)
      __ZNSt3__110shared_ptrIN14clmdep_msgpack2v14zoneEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE in librpc.a(server_session.cc.o)
      __ZNSt3__110shared_ptrIN14clmdep_msgpack2v113object_handleEEC2IS3_NS_14default_deleteIS3_EEEEONS_10unique_ptrIT_T0_EENS_9enable_ifIXaaaantsr19is_lvalue_referenceISA_EE5valuentsr8is_arrayIS9_EE5valuesr14is_convertibleINSB_7pointerEPS3_EE5valueENS4_5__natEE4typeE in librpc.a(dispatcher.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> > >(clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> >&&) in librpc.a(dispatcher.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<>() in librpc.a(response.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> > >(clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> >&&) in librpc.a(response.cc.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::__shared_weak_count", referenced from:
      std::__1::shared_ptr<rpc::detail::server_session> std::__1::shared_ptr<rpc::detail::server_session>::make_shared<rpc::server*&, clmdep_asio::io_service*, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&>(rpc::server*&, clmdep_asio::io_service*&&, clmdep_asio::basic_stream_socket<clmdep_asio::ip::tcp, clmdep_asio::stream_socket_service<clmdep_asio::ip::tcp> >&&, std::__1::shared_ptr<rpc::detail::dispatcher>&, std::__1::atomic<bool>&) in librpc.a(server.cc.o)
      std::__1::shared_ptr<rpc::detail::dispatcher> std::__1::shared_ptr<rpc::detail::dispatcher>::make_shared<>() in librpc.a(server.cc.o)
      __ZNSt3__110shared_ptrIN14clmdep_msgpack2v14zoneEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE in librpc.a(server_session.cc.o)
      __ZNSt3__110shared_ptrIN14clmdep_msgpack2v113object_handleEEC2IS3_NS_14default_deleteIS3_EEEEONS_10unique_ptrIT_T0_EENS_9enable_ifIXaaaantsr19is_lvalue_referenceISA_EE5valuentsr8is_arrayIS9_EE5valuesr14is_convertibleINSB_7pointerEPS3_EE5valueENS4_5__natEE4typeE in librpc.a(dispatcher.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> > >(clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> >&&) in librpc.a(dispatcher.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<>() in librpc.a(response.cc.o)
      std::__1::shared_ptr<clmdep_msgpack::v1::object_handle> std::__1::shared_ptr<clmdep_msgpack::v1::object_handle>::make_shared<clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> > >(clmdep_msgpack::v2::object&, std::__1::unique_ptr<clmdep_msgpack::v1::zone, std::__1::default_delete<clmdep_msgpack::v1::zone> >&&) in librpc.a(response.cc.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

0 个答案:

没有答案
相关问题