Ah, by the way, look for gr-specest [1]; you can look at it as an example of using gr-fft, fftw itself, some more gnuradio modules, and the idyllic language called fortran in an out-of-tree module.
Greetings, Marcus [1] https://github.com/kit-cel/gr-specest On 23.07.2014 22:36, Marcus Müller wrote: > Hi John, > > I think you're on the right track: > you use gr-fft in your code, but then don't tell your linker to link > against that, which leaves your libgnuradio-comso missing the symbols > from gr::fft, which breaks linking test-comso. > > So what you need to do is edit your CMakeLists.txt in your module's root > dir and replace > set(GR_REQUIRED_COMPONENTS RUNTIME) > by > set(GR_REQUIRED_COMPONENTS RUNTIME FFT) > > which will add the necessary linker directives, usually. > Then you will need to add > > ${GNURADIO_FFT_LIBRARY_DIRS} > > to your > link_directories(...) > further down. > > now, in your lib/ directory, edit the CMakeLists.txt > and extend the target_link_libraries(<yourmodule>...) directive with > ${GNURADIO_FFT_LIBRARIES} > > and do the same for the test-<yourmodule> target_link_libraries. > > Hm. Maaaybe we should be adding some more CMake magic, but then again, > CMake is hard and mean :/ > > Greetings, > Marcus > > On 23.07.2014 22:24, John Murphy wrote: >> I am getting a link error when making my Out-of-Tree module. >> >> I apologize in advance for the length of this, my first post to this list. I >> get the daily 'digest' version. >> >> This Out of Tree module was done with gr_modtool and cmake following the >> outline given in >> http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules which, >> after some figuring out how my setup was missing some things, worked (make >> and install and runs in GRC) on another simpler block in this same module. >> >> This is a re-run of the make spew that fails to link: >> >> [jmurphy@localhost build]$ make >> Scanning dependencies of target gnuradio-comso >> [ 7%] Building CXX object >> lib/CMakeFiles/gnuradio-comso.dir/ofdm_rx_impl.cc.o >> Linking CXX shared library libgnuradio-comso.so >> [ 14%] Built target gnuradio-comso >> Linking CXX executable test-comso >> libgnuradio-comso.so: undefined reference to >> `gr::fft::fft_complex::execute()' >> collect2: error: ld returned 1 exit status >> make[2]: *** [lib/test-comso] Error 1 >> make[1]: *** [lib/CMakeFiles/test-comso.dir/all] Error 2 >> make: *** [all] Error 2 >> [jmurphy@localhost build]$ >> >> Note - it seems to me this is saying it linked my custom code to the fft but >> failed to link the test code? Or am I mis-reading this? >> >> I get the same error when I throw a #define switch in my block >> implementation header to directly use fft_impl_fft_complex instead of >> gr::fft::fft_complex. To make this work, such as it is, I had download the >> fft_impl_fft.h header file and edit as follows. >> //#include <fft/api.h> >> //#include <gr_complex.h> >> #include <gnuradio/fft/api.h> >> #include <gnuradio/gr_complex.h> >> There may be a clue there, but I do not understand enough to know. >> >> Then here is the make error for this version, essentially identical. >> >> [jmurphy@localhost build]$ make >> Scanning dependencies of target gnuradio-comso >> [ 7%] Building CXX object >> lib/CMakeFiles/gnuradio-comso.dir/ofdm_rx_impl.cc.o >> Linking CXX shared library libgnuradio-comso.so >> [ 14%] Built target gnuradio-comso >> Linking CXX executable test-comso >> libgnuradio-comso.so: undefined reference to >> `fft_impl_fft_complex::execute()' >> collect2: error: ld returned 1 exit status >> make[2]: *** [lib/test-comso] Error 1 >> make[1]: *** [lib/CMakeFiles/test-comso.dir/all] Error 2 >> make: *** [all] Error 2 >> [jmurphy@localhost build]$ >> >> I run GNU Radio Comapnion with FFT GUI's and they work fine, so clearly >> something is executing FFT's although that may be unrelated. I do not have >> any problems, for now, with any In-Tree heir blocks or with any Out-Of-Tree >> blocks that do not link to the FFT libraries. >> >> Also, this block uses the get_inbuf() and get_outbuf() functions for the >> gnuradio fft classes, under either header mentioned above, with no linker >> issues reported. >> >> Module name is comso, block name is ofdm_rx, block is a C++ general-type >> block >> I am running Fedora 20 with the LXDE desktop environment >> GNU Radio is version 3.7.3 installed using yum from the default Fedora >> repositories >> >> linux kernel: 3.15.6-200.fc20.x86_64 >> >> Some possibly-relevant Fedora packages already installed and latest version: >> gnuradio-3.7.3-1.fc20.x86_64 >> gnuradio-devel-3.7.3-1.fc20.x86_64 >> fftw-3.3.4-3.fc20.x86_64 >> fftw-devel-3.3.4-3.fc20.x86_64 >> fftw-libs-3.3.4-3.fc20.x86_64 >> fftw-libs-single-3.3.4-3.fc20.x86_64 >> fftw-libs-double-3.3.4-3.fc20.x86_64 >> fftw-libs-quad-3.3.4-3.fc20.x86_64 >> fftw-libs-long-3.3.4-3.fc20.x86_64 >> >> Anyone know what I need to do from here to make this build successfully? Am >> I still missing some file or something is still pointing to the wrong place? >> Thanks. >> -John >> >> _______________________________________________ >> Discuss-gnuradio mailing list >> [email protected] >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> _______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
