|
From: | Marcus Müller |
Subject: | Re: [Discuss-gnuradio] Question on how to derive a class in an out-of-tree module based on a gnuradio class |
Date: | Tue, 07 Oct 2014 09:54:16 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 |
This looks like a linker error. In your main CMakeList.txt, you have to add DIGITAL to the line containing set(GR_REQUIRED_COMPONENTS ... If you already have that, sometimes make clean helps, when for some reason linker/ccache/black magic involving CMake failed. Greetings, Marcus On 07.10.2014 03:58, Zhe Feng wrote:
Dear all, I'm trying to derive a *packet_header2* class in my own OOT module based on *gr::digital::packet_header_default*. I followed the way in *packet_heade_ofdm* of gr-digital and made packet_header2.h and packet_header2.cc in my own OOT module. But when I tried to import my_oot in python, it returned an undefined symbol error like this: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/my_oot/__init__.py", line 45, in <module> from my_oot_swig import * File "/usr/local/lib/python2.7/dist-packages/my_oot/my_oot_cdma.py", line 26, in <module> _my_oot_swig = swig_import_helper() File "/usr/local/lib/python2.7/dist-packages/cdma/cdma_swig.py", line 22, in swig_import_helper _mod = imp.load_module('_my_oot_swig', fp, pathname, description) ImportError: /usr/local/lib/libgnuradio-my_oot.so: undefined symbol: _ZTIN2gr7digital21packet_header_defaultE I searched the list and found a previous answered question below http://gnuradio.4.n7.nabble.com/so-undefined-symbol-ZN2gr6blocks12count-bits16E-td46270.html where Marcus suggested editing the CMakeList.txt files by adding the module I needed. So I added *set(GR_REQUIRED_COMPONENTS RUNTIME DIGITAL)* in CMakeLists.txt. and then. This above error disappeared when I import my_oot again in python. But this problem isn't solved. I tried to access some functions of packet_header_default like formatter and base, it returned me an AtrributeError like this: AttributeError: 'packet_header2_sptr' object has no attribute 'formatter', which means the packet_header2 wasn't really a derived class of packet_header_default. I confirmed my conjecture by checking the /usr/local/lib/python2.7/dist-packages/my_oot/my_oot_swig.py where the classes are stored in python. I found that the class packet_header2 is defined as *class packet_header2(object)*. So the packet_header2 *isn't* installed as a derived class of *gr::digital::packet_header_default*. what I expected was *packet_header2(gr::digital::packet_header_default)*. So I'm asking you that how to correctly derive my class (eg: packet_header2) in my own oot module based on a class (eg: packet_header_default) in an existing module (eg: gr-digital)? My packet_header2.h and packet_header2.cc are attached for your reference. Thanks! Best, Zhe |
[Prev in Thread] | Current Thread | [Next in Thread] |