我正在尝试安装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