Problems when trying to make out of tree modules

Dear All,

I am trying to make an out of tree module by following the tutorial on
radio website. I can write simple blocks in C++, compile it and install
to it usable in Gnuradio company.

But for some complex block, I want to implement them based on the
build-in blocks, for example, clock_recovery_mm_ff. So I make a new
in my out-of-tree module and try to first “copy” the build-in block into
out-of-tree module.

I changed the following 4 files in my OOT module to match the
files of the build-in block:


In each file, I changed all the “clock_recovery_mm_ff” into “my_block”.

I can successfully make and install the block without error and warring.
But when I try to run the grc graph, an error happens.

AttributeError: ‘module’ object has no attribute ‘my_block’.

Anyone can tell me what I should do to correct this error? Is there any
other files I should change?

When I make simple blocks by myself, I only change this 4 files and it

Best regards,

Su Li

Hi Su Li,

have you added the new source files to the CMakeLists.txt in lib,
include and grc?
Do these block have the YOURMODULE_API property?

Best regards,

Hi Marcus,

Thank you for your reply.

The source files are added to the CMakeLists.text files. But they are
added by my self, they are added when I use “gr_modtool add -t general
my_block” and “gr_modtool makexml my_block” to make a new block and xml

Only the my_block.h file in include directory contains API

class MY_MODULE_API my_block : virtual public gr::block


Could you please tell me how to check the API property for the block?
Thanks in advance.

Best regards,


2015-05-13 18:47 GMT+02:00 Marcus Müller [email protected]:

Hi Peter,

Thanks for your reply and suggestions.

I checked all the 4 files. I changed the original module and block names
build-in block into my module and block names. But unfortunately, the
still exists.

Could it be possibly because the build-in block, in my case
“clock_recovery_mm_ff” block, has some special dependency which is
in the code of the module but not in the code of the block.

The type of “clock_recovery_mm_ff” block is abnormal. It is just block,
gr::block nor gr::sync_block as mentioned in the OOT tutorial . Here is
code of declaration of this block in *.h file in “include” folder.

class DIGITAL_API clock_recovery_mm_ff : virtual public block

In my code, I change it into

class MY_MODULE_API my_block : virtual public block

Thank you for your reply again.

Best regards,

Su Li

2015-05-13 20:36 GMT+02:00 Peter M. [email protected]:

I’ve had a similar problem when I generated files for my own module
using the gr_modtool and then copied some existing code by replacing the
file(s) that gr_modtool generates. It turns out I had overlooked that
the new “my_block” name needs to be changed in several places, like the
namespace declaration, the #include compiler directive, and the
conditional #ifndef INCLUDED … directives. Once I updated that
correctly the AttributeError got resolved.


Hi all,

I found the problem.

In my OOT block, I try to use mmse_fir_interpolator. Thus, in the
my_block_impl.h file I use the following code to include the fir

#include <gnuradio/filter/mmse_fir_interpolator_ff.h>

But when I run ctest for my block, I got the following error:

symbol: _ZN2gr6filter24mmse_fir_interpolator_ffC1Ev

where ctia802_15_4 is my OOT module name. It seems that this fir filter
not correctly included.

Anyone can tell me how to fix it? Thanks in advance.

Best regards,

Su Li

2015-05-14 14:33 GMT+02:00 Su Li [email protected]:

There’s a GR_REQUIRED_COMPONENTS CMake variable[e.g. 1]; add FILTER.

Best regards,

Am 15. Mai 2015 11:47:51 MESZ, schrieb Su Li [email protected]:

Hi Marcus,

Thanks a lot. It works now.

Best regards,


2015-05-15 14:49 GMT+02:00 Marcus Müller [email protected]: