As earlier, I am porting an OOT that worked with GR 3.9 into GR 3.10. I'm a C++ and CMake newbie, please keep that in mind.
When I run a flowgraph with my GR 3.10 block in it I get: Traceback (most recent call last): from gnuradio import mxvii from .mxvii_python import * ImportError: /home/dcherkus/radioconda/envs/radioconda/lib/python3.9/site-packages/gnuradio/mxvii/mxvii_python.cpython-39-x86_64-linux-gnu.so: undefined symbol: _ZN2gr5mxvii7encoder15set_destinationENSt7cxx1112basic_stringIcSt11char_traitsIcESaIcEEE Then I use c++filt to demangle the undefined symbol: $ c++filt _ZN2gr5mxvii7encoder15set_destinationENSt7cxx1112basic_stringIcSt11char_traitsIcESaIcEEE gr::mxvii::encoder::set_destination(std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) This shows Python is trying to call a callback I'm providing in C++ to set one of the block's parameters. Then I use nm to see what is being exported by the C++ shared library built by my OOT: $ nm -C ~/radioconda/envs/radioconda/lib/libgnuradio-mxvii.so.1.0.0.0 The only methods being exported are: gr::mxvii::encoder_impl::work() gr::mxvii::encoder_impl::encoder_impl() gr::mxvii::encoder_impl::~encoder_impl() gr::mxvii::encoder::make() Then I use nm to see what is being exported by the .o I am building: $ nm -C build/lib/CMakeFiles/gnuradio-mxvii.dir/encoder_impl.cc.o 2>/dev/null | grep set_destination 0000000000000000 T gr::mxvii::encoder_impl::set_destination(std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) So the object file is providing a definition of the callback method, but it doesn't get included in the shared object. What could be going wrong here? Based on reading other people's yml I tried a redundant 'cxx_templates' block but it didn't seem to help: templates: imports: from gnuradio import mxvii make: mxvii.encoder(${source_address}, ${destination_address}) callbacks: - set_source(${source_address}) - set_destination(${destination_address}) cxx_templates: callbacks: - set_source(${source_address}) - set_destination(${destination_address}) Any clues? Thanks,Dave