Hi Joseph, just an update when running through the tutorial from mac and removing multipass etc
Trying to build the pingable-node.c example I get the errors below. I tried the clang++ example you gave and put the errors for that after the gcc example.
`gcc pingable-node.c -o pingable-node
Undefined symbols for architecture x86_64:
“_zts_addr_get_str”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_addr_is_assigned”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_net_join”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_net_transport_is_ready”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_node_get_id”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_node_get_id_pair”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_node_is_online”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_node_start”, referenced from:
_main in pingable-node-3e3e30.o
“_zts_util_delay”, referenced from:
_main in pingable-node-3e3e30.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)’
path is ~/libzt
clang++ pingable-node.c -o pn /usr/local/Cellar/libzt/1.4.1/lib/libzt.a -I/usr/local/Cellar/libzt/libzt/1.4.1/include -lpthread
Homebrew installed libzt into a different path from you as shown above.
clang: warning: treating ‘c’ input as ‘c++’ when in C++ mode, this behavior is deprecated [-Wdeprecated]
with clang
clang pingable-node.c -o pn /usr/local/Cellar/libzt/1.4.1/lib/libzt.a -I/usr/local/Cellar/libzt/libzt/1.4.1/include -lpthread
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::rfind(char, unsigned long) const", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(unsigned long, unsigned long, char const*, unsigned long) const", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::PortMapperImpl::threadMain() in libzt.a(PortMapper.cpp.o)
"std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::push_back(ZeroTier::World::Root&&) in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::InetAddress, std::__1::allocator<ZeroTier::InetAddress> >::push_back(ZeroTier::InetAddress&&) in libzt.a(Utilities.cpp.o)
std::__1::enable_if<(__is_cpp17_forward_iterator<ZeroTier::World::Root*>::value) && (is_constructible<ZeroTier::World::Root, std::__1::iterator_traits<ZeroTier::World::Root*>::reference>::value), void>::type std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::assign<ZeroTier::World::Root*>(ZeroTier::World::Root*, ZeroTier::World::Root*) in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::__vallocate(unsigned long) in libzt.a(Utilities.cpp.o)
std::__1::enable_if<(__is_cpp17_forward_iterator<ZeroTier::InetAddress*>::value) && (is_constructible<ZeroTier::InetAddress, std::__1::iterator_traits<ZeroTier::InetAddress*>::reference>::value), void>::type std::__1::vector<ZeroTier::InetAddress, std::__1::allocator<ZeroTier::InetAddress> >::assign<ZeroTier::InetAddress*>(ZeroTier::InetAddress*, ZeroTier::InetAddress*) in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::InetAddress, std::__1::allocator<ZeroTier::InetAddress> >::__vallocate(unsigned long) in libzt.a(Utilities.cpp.o)
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
...
"std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
_zts_id_new in libzt.a(Controls.cpp.o)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) in libzt.a(NodeService.cpp.o)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libzt.a(NodeService.cpp.o)
ZeroTier::VirtualTap::VirtualTap(char const*, ZeroTier::MAC const&, unsigned int, unsigned int, unsigned long long, void (*)(void*, void*, unsigned long long, ZeroTier::MAC const&, ZeroTier::MAC const&, unsigned int, unsigned int, void const*, unsigned int), void*) in libzt.a(VirtualTap.cpp.o)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) in libzt.a(OSUtils.cpp.o)
ZeroTier::PortMapperImpl::PortMapperImpl(int, char const*) in libzt.a(PortMapper.cpp.o)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) in libzt.a(Peer.cpp.o)
...
"std::logic_error::logic_error(char const*)", referenced from:
std::length_error::length_error(char const*) in libzt.a(Utilities.cpp.o)
std::length_error::length_error(char const*) in libzt.a(NodeService.cpp.o)
std::length_error::length_error(char const*) in libzt.a(VirtualTap.cpp.o)
std::length_error::length_error(char const*) in libzt.a(OSUtils.cpp.o)
std::length_error::length_error(char const*) in libzt.a(PortMapper.cpp.o)
std::length_error::length_error(char const*) in libzt.a(Node.cpp.o)
std::length_error::length_error(char const*) in libzt.a(Multicaster.cpp.o)
...
"std::length_error::~length_error()", referenced from:
std::__1::__throw_length_error(char const*) in libzt.a(Utilities.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(NodeService.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::OSUtils::ztsnprintf(char*, unsigned int, char const*, ...) in libzt.a(OSUtils.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(OSUtils.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(PortMapper.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(Node.cpp.o)
...
"std::runtime_error::runtime_error(char const*)", referenced from:
ZeroTier::Phy<ZeroTier::NodeService*>::Phy(ZeroTier::NodeService*, bool, bool) in libzt.a(NodeService.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::VirtualTap>(ZeroTier::VirtualTap*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Phy<ZeroTier::VirtualTap*>::Phy(ZeroTier::VirtualTap*, bool, bool) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::PortMapperImpl>(ZeroTier::PortMapperImpl*) in libzt.a(PortMapper.cpp.o)
"std::runtime_error::~runtime_error()", referenced from:
ZeroTier::Phy<ZeroTier::NodeService*>::Phy(ZeroTier::NodeService*, bool, bool) in libzt.a(NodeService.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::VirtualTap>(ZeroTier::VirtualTap*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Phy<ZeroTier::VirtualTap*>::Phy(ZeroTier::VirtualTap*, bool, bool) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::PortMapperImpl>(ZeroTier::PortMapperImpl*) in libzt.a(PortMapper.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::OSUtils::rmDashRf(char const*) in libzt.a(OSUtils.cpp.o)
ZeroTier::NetworkConfig::toDictionary(ZeroTier::Dictionary<419456u>&, bool) const in libzt.a(NetworkConfig.cpp.o)
ZeroTier::CertificateOfMembership::toString() const in libzt.a(CertificateOfMembership.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)", referenced from:
_zts_util_sign_root_set in libzt.a(Utilities.cpp.o)
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libzt.a(NodeService.cpp.o)
ZeroTier::OSUtils::readFile(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libzt.a(OSUtils.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*)", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::NodeService::phyOnDatagram(void*, void**, sockaddr const*, sockaddr const*, void*, unsigned long) in libzt.a(NodeService.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::OSUtils::rmDashRf(char const*) in libzt.a(OSUtils.cpp.o)
ZeroTier::OSUtils::split(char const*, char const*, char const*, char const*) in libzt.a(OSUtils.cpp.o)
ZeroTier::NetworkConfig::toDictionary(ZeroTier::Dictionary<419456u>&, bool) const in libzt.a(NetworkConfig.cpp.o)
ZeroTier::CertificateOfMembership::toString() const in libzt.a(CertificateOfMembership.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
ZeroTier::NodeService::fatalErrorMessage() const in libzt.a(NodeService.cpp.o)
std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::push_back(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libzt.a(OSUtils.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, std::__1::allocator<char> const&)", referenced from:
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
ZeroTier::NodeService::~NodeService() in libzt.a(NodeService.cpp.o)
ZeroTier::VirtualTap::~VirtualTap() in libzt.a(VirtualTap.cpp.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
_zts_util_sign_root_set in libzt.a(Utilities.cpp.o)
"std::bad_alloc::bad_alloc()", referenced from:
ZeroTier::Node::Node(void*, void*, ZT_Node_Callbacks const*, long long) in libzt.a(Node.cpp.o)
"std::bad_alloc::~bad_alloc()", referenced from:
ZeroTier::Node::Node(void*, void*, ZT_Node_Callbacks const*, long long) in libzt.a(Node.cpp.o)
"std::terminate()", referenced from:
___clang_call_terminate in libzt.a(Controls.cpp.o)
___clang_call_terminate in libzt.a(Utilities.cpp.o)
___clang_call_terminate in libzt.a(NodeService.cpp.o)
___clang_call_terminate in libzt.a(VirtualTap.cpp.o)
___clang_call_terminate in libzt.a(Utils.cpp.o)
___clang_call_terminate in libzt.a(Identity.cpp.o)
___clang_call_terminate in libzt.a(PortMapper.cpp.o)
...
"typeinfo for std::length_error", referenced from:
std::__1::__throw_length_error(char const*) in libzt.a(Utilities.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(NodeService.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::OSUtils::ztsnprintf(char*, unsigned int, char const*, ...) in libzt.a(OSUtils.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(OSUtils.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(PortMapper.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(Node.cpp.o)
...
"typeinfo for std::runtime_error", referenced from:
ZeroTier::Phy<ZeroTier::NodeService*>::Phy(ZeroTier::NodeService*, bool, bool) in libzt.a(NodeService.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::VirtualTap>(ZeroTier::VirtualTap*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Phy<ZeroTier::VirtualTap*>::Phy(ZeroTier::VirtualTap*, bool, bool) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::PortMapperImpl>(ZeroTier::PortMapperImpl*) in libzt.a(PortMapper.cpp.o)
GCC_except_table42 in libzt.a(Node.cpp.o)
"typeinfo for std::bad_alloc", referenced from:
ZeroTier::Node::Node(void*, void*, ZT_Node_Callbacks const*, long long) in libzt.a(Node.cpp.o)
GCC_except_table42 in libzt.a(Node.cpp.o)
GCC_except_table44 in libzt.a(Node.cpp.o)
GCC_except_table45 in libzt.a(Node.cpp.o)
GCC_except_table46 in libzt.a(Node.cpp.o)
GCC_except_table47 in libzt.a(Node.cpp.o)
GCC_except_table48 in libzt.a(Node.cpp.o)
...
"typeinfo for std::exception", referenced from:
GCC_except_table13 in libzt.a(NodeService.cpp.o)
"typeinfo for int", referenced from:
void ZeroTier::World::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
unsigned int ZeroTier::World::deserialize<8480u>(ZeroTier::Buffer<8480u> const&, unsigned int) in libzt.a(Utilities.cpp.o)
ZeroTier::Identity::Identity(char const*) in libzt.a(Utilities.cpp.o)
void ZeroTier::Identity::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
void ZeroTier::InetAddress::serialize<8480u>(ZeroTier::Buffer<8480u>&) const in libzt.a(Utilities.cpp.o)
ZeroTier::Buffer<8480u>::operator[](unsigned int) const in libzt.a(Utilities.cpp.o)
ZeroTier::Buffer<8480u>::field(unsigned int, unsigned int) const in libzt.a(Utilities.cpp.o)
...
"vtable for __cxxabiv1::__class_type_info", referenced from:
typeinfo for moodycamel::details::ConcurrentQueueProducerTypelessBase in libzt.a(Events.cpp.o)
typeinfo for ZeroTier::NetworkController::Sender in libzt.a(Node.cpp.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for __cxxabiv1::__si_class_type_info", referenced from:
typeinfo for moodycamel::ConcurrentQueue<zts_event_msg_t*, moodycamel::ConcurrentQueueDefaultTraits>::ExplicitProducer in libzt.a(Events.cpp.o)
typeinfo for moodycamel::ConcurrentQueue<zts_event_msg_t*, moodycamel::ConcurrentQueueDefaultTraits>::ImplicitProducer in libzt.a(Events.cpp.o)
typeinfo for ZeroTier::Node in libzt.a(Node.cpp.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for __cxxabiv1::__vmi_class_type_info", referenced from:
typeinfo for moodycamel::ConcurrentQueue<zts_event_msg_t*, moodycamel::ConcurrentQueueDefaultTraits>::ProducerBase in libzt.a(Events.cpp.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for std::length_error", referenced from:
std::length_error::length_error(char const*) in libzt.a(Utilities.cpp.o)
std::length_error::length_error(char const*) in libzt.a(NodeService.cpp.o)
std::length_error::length_error(char const*) in libzt.a(VirtualTap.cpp.o)
std::length_error::length_error(char const*) in libzt.a(OSUtils.cpp.o)
std::length_error::length_error(char const*) in libzt.a(PortMapper.cpp.o)
std::length_error::length_error(char const*) in libzt.a(Node.cpp.o)
std::length_error::length_error(char const*) in libzt.a(Multicaster.cpp.o)
...
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"operator delete[](void*)", referenced from:
ZeroTier::Identity::generate() in libzt.a(Identity.cpp.o)
ZeroTier::Identity::locallyValidate() const in libzt.a(Identity.cpp.o)
ZeroTier::Multicaster::send(void*, long long, ZeroTier::SharedPtr<ZeroTier::Network> const&, ZeroTier::Address const&, ZeroTier::MulticastGroup const&, ZeroTier::MAC const&, unsigned int, void const*, unsigned int) in libzt.a(Multicaster.cpp.o)
ZeroTier::CertificateOfMembership::toString() const in libzt.a(CertificateOfMembership.cpp.o)
ZeroTier::CertificateOfMembership::fromString(char const*) in libzt.a(CertificateOfMembership.cpp.o)
"operator delete(void*)", referenced from:
ZeroTier::init_subsystems() in libzt.a(Controls.cpp.o)
_zts_id_new in libzt.a(Controls.cpp.o)
__runNodeService in libzt.a(Controls.cpp.o)
_zts_node_free in libzt.a(Controls.cpp.o)
ZeroTier::Identity::~Identity() in libzt.a(Controls.cpp.o)
_zts_util_sign_root_set in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::InetAddress, std::__1::allocator<ZeroTier::InetAddress> >::push_back(ZeroTier::InetAddress&&) in libzt.a(Utilities.cpp.o)
...
"operator new[](unsigned long)", referenced from:
ZeroTier::Identity::generate() in libzt.a(Identity.cpp.o)
ZeroTier::Identity::locallyValidate() const in libzt.a(Identity.cpp.o)
ZeroTier::Multicaster::send(void*, long long, ZeroTier::SharedPtr<ZeroTier::Network> const&, ZeroTier::Address const&, ZeroTier::MulticastGroup const&, ZeroTier::MAC const&, unsigned int, void const*, unsigned int) in libzt.a(Multicaster.cpp.o)
ZeroTier::CertificateOfMembership::toString() const in libzt.a(CertificateOfMembership.cpp.o)
ZeroTier::CertificateOfMembership::fromString(char const*) in libzt.a(CertificateOfMembership.cpp.o)
"operator new(unsigned long)", referenced from:
ZeroTier::init_subsystems() in libzt.a(Controls.cpp.o)
_zts_id_new in libzt.a(Controls.cpp.o)
_zts_util_sign_root_set in libzt.a(Utilities.cpp.o)
std::__1::enable_if<(__is_cpp17_forward_iterator<ZeroTier::World::Root*>::value) && (is_constructible<ZeroTier::World::Root, std::__1::iterator_traits<ZeroTier::World::Root*>::reference>::value), void>::type std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::assign<ZeroTier::World::Root*>(ZeroTier::World::Root*, ZeroTier::World::Root*) in libzt.a(Utilities.cpp.o)
std::__1::enable_if<__is_cpp17_forward_iterator<ZeroTier::World::Root*>::value, void>::type std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::__construct_at_end<ZeroTier::World::Root*>(ZeroTier::World::Root*, ZeroTier::World::Root*, unsigned long) in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::World::Root, std::__1::allocator<ZeroTier::World::Root> >::__vallocate(unsigned long) in libzt.a(Utilities.cpp.o)
std::__1::vector<ZeroTier::InetAddress, std::__1::allocator<ZeroTier::InetAddress> >::__vallocate(unsigned long) in libzt.a(Utilities.cpp.o)
...
"___cxa_allocate_exception", referenced from:
void ZeroTier::World::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
unsigned int ZeroTier::World::deserialize<8480u>(ZeroTier::Buffer<8480u> const&, unsigned int) in libzt.a(Utilities.cpp.o)
ZeroTier::Identity::Identity(char const*) in libzt.a(Utilities.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(Utilities.cpp.o)
void ZeroTier::Identity::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
void ZeroTier::InetAddress::serialize<8480u>(ZeroTier::Buffer<8480u>&) const in libzt.a(Utilities.cpp.o)
ZeroTier::Buffer<8480u>::operator[](unsigned int) const in libzt.a(Utilities.cpp.o)
...
"___cxa_begin_catch", referenced from:
__runNodeService in libzt.a(Controls.cpp.o)
___clang_call_terminate in libzt.a(Controls.cpp.o)
___clang_call_terminate in libzt.a(Utilities.cpp.o)
___clang_call_terminate in libzt.a(NodeService.cpp.o)
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::poll(unsigned long) in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::udpBind(sockaddr const*, void*, int) in libzt.a(NodeService.cpp.o)
...
"___cxa_call_unexpected", referenced from:
ZeroTier::VirtualTap::threadMain() in libzt.a(VirtualTap.cpp.o)
ZeroTier::OSUtils::redirectUnixOutputs(char const*, char const*) in libzt.a(OSUtils.cpp.o)
ZeroTier::PortMapperImpl::threadMain() in libzt.a(PortMapper.cpp.o)
"___cxa_end_catch", referenced from:
__runNodeService in libzt.a(Controls.cpp.o)
ZeroTier::NodeService::run() in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::poll(unsigned long) in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::udpBind(sockaddr const*, void*, int) in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::tcpListen(sockaddr const*, void*) in libzt.a(NodeService.cpp.o)
ZeroTier::Node::Node(void*, void*, ZT_Node_Callbacks const*, long long) in libzt.a(Node.cpp.o)
ZeroTier::Node::processBackgroundTasks(void*, long long, long long volatile*) in libzt.a(Node.cpp.o)
...
"___cxa_free_exception", referenced from:
std::__1::__throw_length_error(char const*) in libzt.a(Utilities.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(NodeService.cpp.o)
ZeroTier::Phy<ZeroTier::NodeService*>::Phy(ZeroTier::NodeService*, bool, bool) in libzt.a(NodeService.cpp.o)
ZeroTier::Thread ZeroTier::Thread::start<ZeroTier::VirtualTap>(ZeroTier::VirtualTap*) in libzt.a(VirtualTap.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(VirtualTap.cpp.o)
ZeroTier::Phy<ZeroTier::VirtualTap*>::Phy(ZeroTier::VirtualTap*, bool, bool) in libzt.a(VirtualTap.cpp.o)
ZeroTier::OSUtils::ztsnprintf(char*, unsigned int, char const*, ...) in libzt.a(OSUtils.cpp.o)
...
"___cxa_guard_acquire", referenced from:
ZeroTier::Utils::getSecureRandom(void*, unsigned int) in libzt.a(Utils.cpp.o)
ZeroTier::NetworkConfig::fromDictionary(ZeroTier::Dictionary<419456u> const&) in libzt.a(NetworkConfig.cpp.o)
"___cxa_guard_release", referenced from:
ZeroTier::Utils::getSecureRandom(void*, unsigned int) in libzt.a(Utils.cpp.o)
ZeroTier::NetworkConfig::fromDictionary(ZeroTier::Dictionary<419456u> const&) in libzt.a(NetworkConfig.cpp.o)
"___cxa_rethrow", referenced from:
ZeroTier::Node::Node(void*, void*, ZT_Node_Callbacks const*, long long) in libzt.a(Node.cpp.o)
ZeroTier::Node::ncSendConfig(unsigned long long, unsigned long long, ZeroTier::Address const&, ZeroTier::NetworkConfig const&, bool) in libzt.a(Node.cpp.o)
ZeroTier::NetworkConfig::toDictionary(ZeroTier::Dictionary<419456u>&, bool) const in libzt.a(NetworkConfig.cpp.o)
ZeroTier::CertificateOfMembership::toString() const in libzt.a(CertificateOfMembership.cpp.o)
"___cxa_throw", referenced from:
void ZeroTier::World::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
unsigned int ZeroTier::World::deserialize<8480u>(ZeroTier::Buffer<8480u> const&, unsigned int) in libzt.a(Utilities.cpp.o)
ZeroTier::Identity::Identity(char const*) in libzt.a(Utilities.cpp.o)
std::__1::__throw_length_error(char const*) in libzt.a(Utilities.cpp.o)
void ZeroTier::Identity::serialize<8480u>(ZeroTier::Buffer<8480u>&, bool) const in libzt.a(Utilities.cpp.o)
void ZeroTier::InetAddress::serialize<8480u>(ZeroTier::Buffer<8480u>&) const in libzt.a(Utilities.cpp.o)
ZeroTier::Buffer<8480u>::operator[](unsigned int) const in libzt.a(Utilities.cpp.o)
...
"___gxx_personality_v0", referenced from:
ZeroTier::init_subsystems() in libzt.a(Controls.cpp.o)
_zts_init_from_storage in libzt.a(Controls.cpp.o)
_zts_init_from_memory in libzt.a(Controls.cpp.o)
_zts_init_set_event_handler in libzt.a(Controls.cpp.o)
_zts_init_blacklist_if in libzt.a(Controls.cpp.o)
_zts_init_set_roots in libzt.a(Controls.cpp.o)
_zts_init_set_port in libzt.a(Controls.cpp.o)
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
hope it helps