Hello All, I am trying to migrate gr-iio -b maint-3.8 to gnuradio 3.9 with pybind11. I have, I think, got most of it working.
My latest hurdle is at https://wiki.gnuradio.org/index.php/GNU_Radio_3.9_OOT_Module_Porting_Guide. Step 8. Though not necessary, boost::bind instances for message port handlers can be replaced with lambda functions for performance and simplicity as well as consistency with the in-tree modules. My main reason for looking to do this is I get an error during my build related to boost::bind. [ 25%] Building CXX object lib/CMakeFiles/gnuradio-iio.dir/attr_sink_impl.cc.o cd /home/chris/src/iio/gr-iio/build/lib && /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DFFTW3F_THREADS -DGR_CTRLPORT -Dgnuradio_iio_EXPORTS -I/home/chris/src/iio/gr-iio/lib/../include -I/home/chris/src/iio/gr-iio/build/lib -isystem /usr/include/python3.8 -isystem /usr/lib/python3.8/site-packages/numpy/core/include -isystem /opt/gnuradio/include -O3 -DNDEBUG -fPIC -fvisibility=hidden -std=gnu++11 -o CMakeFiles/gnuradio-iio.dir/attr_sink_impl.cc.o -c /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc: In constructor ‘gr::iio::attr_sink_impl::attr_sink_impl(const string&, const string&, const string&, int, bool, bool)’: /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:92:92: error: ‘_1’ was not declared in this scope 92 | ::mp("attr"), boost::bind(&attr_sink_impl::write_attribute, this, _1)); | ^~ /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:92:92: note: suggested alternatives: In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/placeholders.hpp:43, from /usr/include/boost/iterator/iterator_categories.hpp:16, from /usr/include/boost/iterator/iterator_facade.hpp:13, from /usr/include/boost/filesystem/path.hpp:29, from /usr/include/boost/filesystem.hpp:16, from /opt/gnuradio/include/gnuradio/logger.h:36, from /opt/gnuradio/include/gnuradio/basic_block.h:16, from /opt/gnuradio/include/gnuradio/block.h:15, from /home/chris/src/iio/gr-iio/lib/../include/iio/attr_sink.h:27, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.h:26, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:27: /usr/include/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp:29:16: note: ‘mpl_::_1’ 29 | typedef arg<1> _1; | ^~ In file included from /usr/include/boost/system/error_code.hpp:19, from /usr/include/boost/filesystem/path_traits.hpp:22, from /usr/include/boost/filesystem/path.hpp:26, from /usr/include/boost/filesystem.hpp:16, from /opt/gnuradio/include/gnuradio/logger.h:36, from /opt/gnuradio/include/gnuradio/basic_block.h:16, from /opt/gnuradio/include/gnuradio/block.h:15, from /home/chris/src/iio/gr-iio/lib/../include/iio/attr_sink.h:27, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.h:26, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:27: /usr/include/c++/10.2.0/functional:221:34: note: ‘std::placeholders::_1’ 221 | extern const _Placeholder<1> _1; | ^~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/placeholders.hpp:43, from /usr/include/boost/iterator/iterator_categories.hpp:16, from /usr/include/boost/iterator/iterator_facade.hpp:13, from /usr/include/boost/filesystem/path.hpp:29, from /usr/include/boost/filesystem.hpp:16, from /opt/gnuradio/include/gnuradio/logger.h:36, from /opt/gnuradio/include/gnuradio/basic_block.h:16, from /opt/gnuradio/include/gnuradio/block.h:15, from /home/chris/src/iio/gr-iio/lib/../include/iio/attr_sink.h:27, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.h:26, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:27: /usr/include/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp:29:16: note: ‘mpl_::_1’ 29 | typedef arg<1> _1; | ^~ In file included from /usr/include/boost/bind/bind.hpp:2356, from /usr/include/boost/thread/detail/thread.hpp:33, from /usr/include/boost/thread/thread_only.hpp:22, from /usr/include/boost/thread/thread.hpp:12, from /usr/include/boost/thread.hpp:13, from /opt/gnuradio/include/gnuradio/logger.h:38, from /opt/gnuradio/include/gnuradio/basic_block.h:16, from /opt/gnuradio/include/gnuradio/block.h:15, from /home/chris/src/iio/gr-iio/lib/../include/iio/attr_sink.h:27, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.h:26, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:27: /usr/include/boost/bind/placeholders.hpp:46:38: note: ‘boost::placeholders::_1’ 46 | BOOST_STATIC_CONSTEXPR boost::arg<1> _1; | ^~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/placeholders.hpp:43, from /usr/include/boost/iterator/iterator_categories.hpp:16, from /usr/include/boost/iterator/iterator_facade.hpp:13, from /usr/include/boost/filesystem/path.hpp:29, from /usr/include/boost/filesystem.hpp:16, from /opt/gnuradio/include/gnuradio/logger.h:36, from /opt/gnuradio/include/gnuradio/basic_block.h:16, from /opt/gnuradio/include/gnuradio/block.h:15, from /home/chris/src/iio/gr-iio/lib/../include/iio/attr_sink.h:27, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.h:26, from /home/chris/src/iio/gr-iio/lib/attr_sink_impl.cc:27: /usr/include/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp:29:16: note: ‘mpl_::_1’ 29 | typedef arg<1> _1; | ^~ make[2]: *** [lib/CMakeFiles/gnuradio-iio.dir/build.make:197: lib/CMakeFiles/gnuradio-iio.dir/attr_sink_impl.cc.o] Error 1 make[2]: Leaving directory '/home/chris/src/iio/gr-iio/build' make[1]: *** [CMakeFiles/Makefile2:267: lib/CMakeFiles/gnuradio-iio.dir/all] Error 2 make[1]: Leaving directory '/home/chris/src/iio/gr-iio/build' make: *** [Makefile:149: all] Error 2 A few questions. Does anyone know which, if any, solution proposed by the compiler, I should pursue? Is there an easy fix with lambda functions? Finally, I am wondering if there is a better branch than maint-3.8 to use for migrating gr-iio? Thanks in advance, Chris
