# FFTW3 runtime error

**URL:** <https://www.ruby-forum.com/t/fftw3-runtime-error/239541>\
**Category:** GNU Radio\
**Created:** [March 4, 2014, 6:57am UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541 "2014-03-04T06:57:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [March 4, 2014, 6:57am UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541/1 "2014-03-04T06:57:37Z")

</div>

Dear Sir,

I am trying to build a custom block with FFT capability.  
I use FFTW3, the FFT stuff runs well as a standalone program before  
integrating into gnuradio.

Then I integrate the FFT function into the block, it compiles without  
any  
error.  
But when I run the flow graph in GRC, it produces following error  
message.

```
    Generating: "/home/sgku/gnuradio/flow_graphs/top_block.py"
    Executing: "/home/sgku/gnuradio/flow_graphs/top_block.py"
    Traceback (most recent call last):
      File "/home/sgku/gnuradio/flow_graphs/top_block.py", line 18, 

```

in  
  
import activecat  
File  
“/usr/local/lib/python2.7/dist-packages/activecat/ **init**.py”, line 45,  
in  
  
from activecat\_swig import \*  
File  
“/usr/local/lib/python2.7/dist-packages/activecat/activecat\_swig.py”,  
line  
26, in   
\_activecat\_swig = swig\_import\_helper()  
File  
“/usr/local/lib/python2.7/dist-packages/activecat/activecat\_swig.py”,  
line  
22, in swig\_import\_helper  
\_mod = imp.load\_module(’\_activecat\_swig’, fp, pathname,  
description)  
ImportError: /usr/local/lib/libgnuradio-activecat.so: undefined  
symbol: fftw\_plan\_dft\_1d  
\>\>\> Done

Below is the implmentation source file:

```
namespace gr {
          namespace activecat {

            fft1::sptr
            fft1::make(int fft_size, int direction, bool fft_shift)
            {
              return gnuradio::get_initial_sptr
                (new fft1_impl(fft_size, direction, fft_shift));
            }

            // constructor
            fft1_impl::fft1_impl(int fft_size, int direction, bool

```

fft\_shift)  
: gr::sync\_block(“fft1”,  
gr::io\_signature::make( 1, 1,  
sizeof(gr\_complex)),  
gr::io\_signature::make( 1, 1,  
sizeof(gr\_complex))),  
d\_N(fft\_size),  
d\_direction(direction),  
d\_shift(fft\_shift)  
{  
d\_input = (fftw\_complex\*) fftw\_malloc(  
sizeof(fftw\_complex) \* d\_N );  
d\_plan = fftw\_plan\_dft\_1d( d\_N, d\_input, d\_input,  
FFTW\_BACKWARD, FFTW\_ESTIMATE ); // later change FFTW\_BACKWARD to  
d\_direction

```
                set_output_multiple( d_N );
                set_min_noutput_items( d_N );
            }

            // destructor
            fft1_impl::~fft1_impl()
            { }

            int
            fft1_impl::work(
                      int noutput_items,
                      gr_vector_const_void_star &input_items,
                      gr_vector_void_star &output_items)
            {
                const gr_complex *in = (const gr_complex *)

```

input\_items[0];  
gr\_complex \*out = (gr\_complex \*)  
output\_items[0];

```
                for (int i=0; i < noutput_items; i++)
                {
                    d_input[i][0] = in[i].real();
                    d_input[i][1] = in[i].imag();
                }

                fftw_execute( d_plan );

                for (int i=0; i < noutput_items; i++)
                {
                    out[i].real( d_input[i][0] );
                    out[i].imag( d_input[i][1] );
                }

                return noutput_items;
            }
          } /* namespace activecat */
        } /* namespace gr */

```

Question:  
How to solve this error ?

Regards,  
Activecat  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![activecat\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c57346/32.png) [@activecat\_k](https://www.ruby-forum.com/u/activecat_k)\
**Post date:** [March 4, 2014, 8:01am UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541/2 "2014-03-04T08:01:44Z")

</div>

The implementation header file is as below:

#ifndef INCLUDED\_ACTIVECAT\_FFT1\_IMPL\_H  
#define INCLUDED\_ACTIVECAT\_FFT1\_IMPL\_H

#include \<activecat/fft1.h\>  
#include \<fftw3.h\>

namespace gr {  
namespace activecat {

```
class fft1_impl : public fft1
{
 private:
   int d_N;
   int d_direction;
   int d_shift;

   fftw_complex *d_input;
   fftw_plan d_plan;

 public:
    fft1_impl(int fft_size, int direction, bool fft_shift);
    ~fft1_impl();

    int work(
       int noutput_items,
       gr_vector_const_void_star &input_items,
       gr_vector_void_star &output_items);
};

```

} // namespace activecat  
} // namespace gr

#endif /\* INCLUDED\_ACTIVECAT\_FFT1\_IMPL\_H \*/

---

<div class="post-metadata">

**Author:** ![activecat\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c57346/32.png) [@activecat\_k](https://www.ruby-forum.com/u/activecat_k)\
**Post date:** [March 4, 2014, 11:01am UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541/3 "2014-03-04T11:01:15Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Hi Activecat,

your sourcecode should be fine - what you see is an error that tells  
you that at runtime, a symbol could not be found. This means that the  
fftw library has not been linked against.  
On 2014-02-26 there was a thread on discuss-gnuradio with the subject  
“Link FFTW3 in OOT module” featuring Sabathy M. and me, could you  
please look into the mailing list archive; the solution to your  
problem should be there 🙂

Happy hacking,  
Marcus

On 04.03.2014 07:27, Activecat wrote:

> class fft1\_impl : public fft1 { private: int d\_N; int d\_direction;  
> } // namespace activecat } // namespace gr
> 
> > I am trying to build a custom block with FFT capability. I use  
> > “/home/sgku/gnuradio/flow\_graphs/top\_block.py”, line 18, in
> > 
> > > > > Done
> > 
> > fftw\_execute( d\_plan );  
> > Question: How to solve this error ?
> > 
> > Regards, Activecat [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Discuss-gnuradio  
> mailing list [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1  
Comment: Using GnuPG with Thunderbird - [http://www.enigmail.net/](http://www.enigmail.net/)

iQEcBAEBAgAGBQJTFaQQAAoJEBQ6EdjyzlHtjCcH/1cqqf9PSSAc5FmNIH45I6Uy  
0A7/Rhqb5nwjBjVlRe0UXrVk7EAAK/PwDQgliMw8oZ+5KuqhqVfFtx3Vch9Rs75a  
Hmprl8fEDanKyfVa0cKyhmJCyuRFE29R8XxdAt07HalJqh1clhXOo6vkoZTQeDmh  
gm2NOflIdEtWk2kggo92Ii23El8xbQeWhaM1/OXTyqOR7d+V6U4aF6BwirJ4oPos  
uOXfKxteqjetMhIm50FClQyKpS/gRLIvhhVz3P2Yc2tJM8GlLvH0gP+5M1MeKh5j  
yJTbYzbHByFsAIT39zyFDrmz5FU1+pbwSKe0dLM1/HrclZHSkiW2dWREx7UYEHg=  
=clWo  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![activecat\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c57346/32.png) [@activecat\_k](https://www.ruby-forum.com/u/activecat_k)\
**Post date:** [March 4, 2014, 11:03am UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541/4 "2014-03-04T11:03:36Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Sorry, forgot to mention: additionally to the solution in my answer to  
Sabathy,  
add ${FFTW3(F)\_LIBRARIES} to your lib/CMakeLists.txt  
target\_link\_libraries, also add:  
link\_directories(${FFTW3F\_LIBRARY\_DIRS})

Greetings,  
Marcus

On 04.03.2014 10:59, Marcus M. wrote:

> Happy hacking, Marcus
> 
> > namespace gr { namespace activecat {  
> > &input\_items, gr\_vector\_void\_star &output\_items); };
> > 
> > > Dear Sir,  
> > > Executing: “/home/sgku/gnuradio/flow\_graphs/top\_block.py”  
> > > Traceback (most recent call last): File  
> > > “/home/sgku/gnuradio/flow\_graphs/top\_block.py”, line 18, in  
> > > import activecat File  
> > > “/usr/local/lib/python2.7/dist-packages/activecat/ **init**.py”,

line 45, in from activecat\_swig import \* File

> > > “/usr/local/lib/python2.7/dist-packages/activecat/activecat\_swig.py”,

line 26, in \_activecat\_swig = swig\_import\_helper() File

> > > “/usr/local/lib/python2.7/dist-packages/activecat/activecat\_swig.py”,

line 22, in swig\_import\_helper \_mod =

> > > d\_N ); d\_plan = fftw\_plan\_dft\_1d( d\_N, d\_input, d\_input,  
> > > input\_items[0]; gr\_complex \*out = (gr\_complex \*)
> 
> > \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Discuss-gnuradio  
> > mailing list [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> > [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)
> 
> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Discuss-gnuradio  
> mailing list [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1  
Comment: Using GnuPG with Thunderbird - [http://www.enigmail.net/](http://www.enigmail.net/)

iQEcBAEBAgAGBQJTFaSgAAoJEBQ6EdjyzlHtj2gIAIIt8PS8OpbpatPGFr6yAWob  
IDYN3HfhJ23juTkTW75U8oKCW+TPCFSCjUx/0tWdamBELEJUAm48mx8ZqP/ZQUbS  
ry6MvIFOhAIJbBgFY7RewLGI1WNgISxxtSrV+hagRJ/cbTqMIYh0654mS16jwjN/  
JmIlnPPSE5ThRg7c0YowSv5YLtYG6tQS41V8QGUlkCYEYmSKZvs8W3oVNOhDXUEQ  
IBcE1Udblud+R3iOFqZjz7mXX/VxAlNngTWdDJPPu8VCnGIttTFuc2Eqg4umkwh3  
C0/0avWsHklK252E3KcgJEExMhc73asBiKgDsS0q9OzIr5/aqRbJui9Ff6LPs4g=  
=72Kz  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![activecat\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c57346/32.png) [@activecat\_k](https://www.ruby-forum.com/u/activecat_k)\
**Post date:** [March 4, 2014, 2:59pm UTC](https://www.ruby-forum.com/t/fftw3-runtime-error/239541/5 "2014-03-04T14:59:40Z")

</div>

Dear Marcus,

Thank you very much.  
As according to your guideline, the runtime error has been solved.  
With some minor modification to the work() function, now the flow graph  
executes without any error.

Cheers,  
Activecat
