rfnoc: move chdr_ctrl_xport::make() out of header

GCC 16 eagerly instantiates std::_Sp_counted_ptr_inplace<chdr_ctrl_xport>
in every TU that includes chdr_ctrl_xport.hpp with the inline make()
definition. This causes the destructor to be referenced in TUs that do
not link against chdr_ctrl_xport.cpp (e.g. client_zero_test), resulting
in undefined reference linker errors.

Fix by moving make() from the inline header definition into the .cpp
file, so std::make_shared<chdr_ctrl_xport> is only instantiated where
~chdr_ctrl_xport() is also defined.
This commit is contained in:
Martin Braun 2026-05-26 12:30:09 +02:00
parent 98d1a0aab8
commit 050c7e2dad
2 changed files with 22 additions and 12 deletions

View File

@ -49,18 +49,7 @@ public:
size_t num_send_frames,
size_t num_recv_frames,
size_t send_frame_size,
disconnect_callback_t disconnect)
{
return std::make_shared<chdr_ctrl_xport>(io_srv,
send_link,
recv_link,
pkt_factory,
my_epid,
num_send_frames,
num_recv_frames,
send_frame_size,
disconnect);
}
disconnect_callback_t disconnect);
/*!
* Make a chdr_ctrl_xport

View File

@ -13,6 +13,27 @@ using namespace uhd::rfnoc;
using namespace uhd::rfnoc::chdr;
using namespace uhd::transport;
chdr_ctrl_xport::sptr chdr_ctrl_xport::make(io_service::sptr io_srv,
send_link_if::sptr send_link,
recv_link_if::sptr recv_link,
const chdr::chdr_packet_factory& pkt_factory,
sep_id_t my_epid,
size_t num_send_frames,
size_t num_recv_frames,
size_t send_frame_size,
disconnect_callback_t disconnect)
{
return std::make_shared<chdr_ctrl_xport>(io_srv,
send_link,
recv_link,
pkt_factory,
my_epid,
num_send_frames,
num_recv_frames,
send_frame_size,
disconnect);
}
chdr_ctrl_xport::chdr_ctrl_xport(io_service::sptr io_srv,
send_link_if::sptr send_link,
recv_link_if::sptr recv_link,