Package: src:nethogs Version: 0.9.0-1 Severity: normal Tags: patch User: [email protected] Usertags: origin-ubuntu stonking ubuntu-patch
Dear Maintainer, nethogs 0.9.0-1 fails to build from source under GCC 15 because dpkg-gensymbols detects missing symbols in debian/libnethogs0.symbols: dpkg-gensymbols: error: some symbols or patterns disappeared in the symbols file GCC 15 optimizes and inlines compiler-generated C++ template instantiations, destructors (std::map, std::vector, std::list, std::_Rb_tree, std::ctype), and PackListNode::~PackListNode(), omitting them from dynamic export. None of these internal C++ symbols belong to the public libnethogs0 C ABI (nethogsmonitor_loop, nethogsmonitor_breakloop, nethogs_packet_stats, nethogs_enable_udp). Marking these symbols as (optional) in debian/libnethogs0.symbols allows the package to build cleanly under GCC 15 while keeping tracking for architectures or compilers where they remain emitted. This issue and fix were tracked in Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nethogs/+bug/2168992 The attached patch resolves the build failure. --- a/debian/libnethogs0.symbols +++ b/debian/libnethogs0.symbols @@ -7,7 +7,7 @@ (c++)"process_ip(unsigned char*, pcap_pkthdr const*, unsigned char const*)@Base" 0.8.8 (c++)"sameinaddr(in_addr, in_addr)@Base" 0.8.8 (c++)"up_running(int)@Base" 0.8.8 - (c++)"addprocinfo(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >&)@Base" 0.8.8 + (c++|optional)"addprocinfo(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >&)@Base" 0.8.8 (c++)"findProcess(prg_node*)@Base" 0.8.8 (c++)"findProcess(unsigned long)@Base" 0.8.8 (c++)"get_devices(int, char**, bool)@Base" 0.8.8 @@ -19,7 +19,7 @@ (c++)"process_init()@Base" 0.8.8 (c++)"conninode_tcp[abi:cxx11]@Base" 0.8.8 (c++)"conninode_udp[abi:cxx11]@Base" 0.8.8 - (c++)"addtoconninode(char*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >&)@Base" 0.8.8 + (c++|optional)"addtoconninode(char*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >&)@Base" 0.8.8 (c++)"findConnection(Packet*, short)@Base" 0.8.8 (c++)"reread_mapping()@Base" 0.8.8 (c++)"check_all_procs()@Base" 0.8.8 @@ -59,7 +59,7 @@ (c++)"Connection::~Connection()@Base" 0.8.8 (c++)"local_addr::contains(in6_addr const&)@Base" 0.8.8 (c++)"local_addr::contains(unsigned int const&)@Base" 0.8.8 - (c++)"PackListNode::~PackListNode()@Base" 0.8.8 + (c++|optional)"PackListNode::~PackListNode()@Base" 0.8.8 (c++)"Packet::isOlderThan(timeval)@Base" 0.8.8 (c++)"Packet::newInverted()@Base" 0.8.8 (c++)"Packet::gethashstring()@Base" 0.8.8 @@ -85,23 +85,23 @@ (c++)"Packet::matchSource(Packet const*) const@Base" 0.8.8 (c++)"Packet::match(Packet const*) const@Base" 0.8.8 (c++)"Packet::operator<(Packet const&) const@Base" 0.8.8 - (c++)"std::ctype<char>::do_widen(char) const@Base" 0.8.8 - (c++)"std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::~map()@Base" 0.8.8 - (c++)"std::map<void*, NethogsMonitorRecord, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::~map()@Base" 0.8.8 - (c++)"std::map<unsigned long, prg_node*, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, prg_node*> > >::~map()@Base" 0.8.8 - (c++)"std::set<int, std::less<int>, std::allocator<int> >::~set()@Base" 0.8.8 - (c++)"std::vector<int, std::allocator<int> >::~vector()@Base" 0.8.8 - (c++)"std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf()@Base" 0.8.8 - (c++)"std::__cxx11::list<handle, std::allocator<handle> >::~list()@Base" 0.8.8 - (c++|arch=!m68k)"std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>, std::tuple<> >(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>&&, std::tuple<>&&)@Base" 0.8.8 - (c++)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_get_insert_unique_pos(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8 - (c++)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8 - (c++|arch=!armel,!armhf,!i386,!s390x,!alpha,!powerpc,!ppc64)"std::_Rb_tree<Connection*, Connection*, std::_Identity<Connection*>, ConnectionComparator, std::allocator<Connection*> >::equal_range(Connection* const&)@Base" 0.8.8 - (c++|arch=amd64,arm64,ppc64el)"std::pair<std::_Rb_tree_iterator<int>, bool> std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_insert_unique<int>(int&&)@Base" 0.8.8 - (c++|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::_M_get_insert_unique_pos(void* const&)@Base" 0.8.8 - (c++|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<void* const, NethogsMonitorRecord> >, void* const&)@Base" 0.8.8 - (c++)"std::multiset<Connection*, ConnectionComparator, std::allocator<Connection*> >::~multiset()@Base" 0.8.8 - (c++|arch=!m68k)"std::piecewise_construct@Base" 0.8.8 + (c++|optional)"std::ctype<char>::do_widen(char) const@Base" 0.8.8 + (c++|optional)"std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::~map()@Base" 0.8.8 + (c++|optional)"std::map<void*, NethogsMonitorRecord, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::~map()@Base" 0.8.8 + (c++|optional)"std::map<unsigned long, prg_node*, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, prg_node*> > >::~map()@Base" 0.8.8 + (c++|optional)"std::set<int, std::less<int>, std::allocator<int> >::~set()@Base" 0.8.8 + (c++|optional)"std::vector<int, std::allocator<int> >::~vector()@Base" 0.8.8 + (c++|optional)"std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf()@Base" 0.8.8 + (c++|optional)"std::__cxx11::list<handle, std::allocator<handle> >::~list()@Base" 0.8.8 + (c++|optional|arch=!m68k)"std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>, std::tuple<> >(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>&&, std::tuple<>&&)@Base" 0.8.8 + (c++|optional)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_get_insert_unique_pos(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8 + (c++|optional)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8 + (c++|optional|arch=!armel,!armhf,!i386,!s390x,!alpha,!powerpc,!ppc64)"std::_Rb_tree<Connection*, Connection*, std::_Identity<Connection*>, ConnectionComparator, std::allocator<Connection*> >::equal_range(Connection* const&)@Base" 0.8.8 + (c++|optional|arch=amd64,arm64,ppc64el)"std::pair<std::_Rb_tree_iterator<int>, bool> std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_insert_unique<int>(int&&)@Base" 0.8.8 + (c++|optional|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::_M_get_insert_unique_pos(void* const&)@Base" 0.8.8 + (c++|optional|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<void* const, NethogsMonitorRecord> >, void* const&)@Base" 0.8.8 + (c++|optional)"std::multiset<Connection*, ConnectionComparator, std::allocator<Connection*> >::~multiset()@Base" 0.8.8 + (c++|optional|arch=!m68k)"std::piecewise_construct@Base" 0.8.8

