-----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üller wrote: > 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 Mischa 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: >> 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 */ > > > >> On Tue, Mar 4, 2014 at 1:55 PM, Activecat <active...@gmail.com> >> wrote: > >>> 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 >>> <module> import activecat File >>> "/usr/local/lib/python2.7/dist-packages/activecat/__init__.py", >>> >>> line 45, in <module> from activecat_swig import * File >>> "/usr/local/lib/python2.7/dist-packages/activecat/activecat_swig.py", >>> >>> line 26, in <module> _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 active...@gmail.com >>> > > > >> _______________________________________________ Discuss-gnuradio >> mailing list Discuss-gnuradio@gnu.org >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > > _______________________________________________ Discuss-gnuradio > mailing list Discuss-gnuradio@gnu.org > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJTFaSgAAoJEBQ6EdjyzlHtj2gIAIIt8PS8OpbpatPGFr6yAWob IDYN3HfhJ23juTkTW75U8oKCW+TPCFSCjUx/0tWdamBELEJUAm48mx8ZqP/ZQUbS ry6MvIFOhAIJbBgFY7RewLGI1WNgISxxtSrV+hagRJ/cbTqMIYh0654mS16jwjN/ JmIlnPPSE5ThRg7c0YowSv5YLtYG6tQS41V8QGUlkCYEYmSKZvs8W3oVNOhDXUEQ IBcE1Udblud+R3iOFqZjz7mXX/VxAlNngTWdDJPPu8VCnGIttTFuc2Eqg4umkwh3 C0/0avWsHklK252E3KcgJEExMhc73asBiKgDsS0q9OzIr5/aqRbJui9Ff6LPs4g= =72Kz -----END PGP SIGNATURE----- _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio