Problem with "How-to-write-a-block"-tutorial


#1

Hi again, so ive done the tutorial and i got the make check to pass the
test
the howto module is obviously installed.

So for a second tutorial i made a simple change to blocks i simply (like
someone else here had done) changed the name of everything to a new
module
("howto2) and changed it from computing the square to computing the
input
times 2. i.e. doubling it.

But when im suppose to do the test it seems the module howto2 isnt
installed, ive made all the necessary changes to the makefile.am and the
howto.i files in the /lib folder.

I also made a new test file called qa_howto_2.py and changed the
makefile in
/python folder so that it whould run that test and this seems to work
its
just that howto2 module isnt installed.

Anyone knows why my howto2 module isnt installing?


#2

Hi and thanks for the help, yes ive run it (and ive renamed the block to
‘test’ instead of ‘howto_2’ but i still get something wrong obviously
because when running the test script i get this error:

File “./qa_test.py”, line 6, in
from gnuradio import gr, gr_unittest, test
File “/Library/Python/2.5/site-packages/gnuradio/test.py”, line 21, in

import _test
ImportError: dlopen(/Library/Python/2.5/site-packages/gnuradio/_test.so,
2):
Symbol not found: __ZTV14test_double_ff
Referenced from: /Library/Python/2.5/site-packages/gnuradio/_test.so
Expected in: dynamic lookup

it seems like there is something wrong in the swig-generated _test.so
file
but how to fix that i have no idea?

2009/2/18 Dominic S. removed_email_address@domain.invalid


#3

On Wed, Feb 18, 2009 at 03:39:52PM +0100, Emil M. wrote:

Symbol not found: __ZTV14test_double_ff
Referenced from: /Library/Python/2.5/site-packages/gnuradio/_test.so
Expected in: dynamic lookup

it seems like there is something wrong in the swig-generated _test.so file but
how to fix that i have no idea?

I’ve seen a couple of these recently, usually the make process messed up
somewhere along the row and didn’t apply recent changes or something
like that. The effect is, the linker links everything it can’t find and
doesn’t realise there’s “something missing”.
So far I’ve always managed to get around this problem by making clean
and restarting the process. Check the make logs that your code gets
compiled
w/o any errors. Of course, you might still have a bug in your Makefile -
one way to inspect libraries is objdump (e.g. objdump -t _tool.so). You
should definitely triple check your Makefile.am.

MB


#4

On Wed, Feb 18, 2009 at 03:39:52PM +0100, Emil M. wrote:

Symbol not found: __ZTV14test_double_ff
Referenced from: /Library/Python/2.5/site-packages/gnuradio/_test.so
Expected in: dynamic lookup

it seems like there is something wrong in the swig-generated _test.so file
but how to fix that i have no idea?

$ c++filt _ZTV14test_double_ff
vtable for test_double_ff

Are you sure you’ve got code for the class named test_double_ff linked
into the shared library you’re building?

Eric


#5

Im still baning my head against the wall here, ive linked everything
exactly
like in the example but it just gives the same error message on running
the
tests.

2009/2/19 Emil M. removed_email_address@domain.invalid


#6

2009/2/18 Eric B. removed_email_address@domain.invalid

ImportError: dlopen(/Library/Python/2.5/site-packages/gnuradio/_test.so,

$ c++filt _ZTV14test_double_ff
vtable for test_double_ff

Are you sure you’ve got code for the class named test_double_ff linked
into the shared library you’re building?

Eric

Ive linked everythin in the same way as in the howto_square_ff example,
what
files could i have missed something in to not get the test_double_ff
class
linked?

And well if its any reason to the problem this is how my makefile looks:

Copyright 2004,2005,2006,2008 Free Software Foundation, Inc.

This file is part of GNU Radio

GNU Radio is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 3, or (at your option)

any later version.

GNU Radio is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with GNU Radio; see the file COPYING. If not, write to

the Free Software Foundation, Inc., 51 Franklin Street,

Boston, MA 02110-1301, USA.

include $(top_srcdir)/Makefile.common

Install this stuff so that it ends up as the gnuradio.test module

This usually ends up at:

${prefix}/lib/python${python_version}/site-packages/gnuradio

ourpythondir = $(grpythondir)
ourlibdir = $(grpyexecdir)

AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS)

SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(SWIGGRFLAGS)

ALL_IFILES =
$(LOCAL_IFILES)
$(NON_LOCAL_IFILES)

NON_LOCAL_IFILES =
$(GNURADIO_CORE_INCLUDEDIR)/swig/gnuradio.i

LOCAL_IFILES =
$(top_srcdir)/src/lib/test.i

These files are built by SWIG. The first is the C++ glue.

The second is the python wrapper that loads the _test shared library

and knows how to call our extensions.

BUILT_SOURCES =
test.cc
test.py

This gets howto.py installed in the right place

ourpython_PYTHON =
test.py

ourlib_LTLIBRARIES = _test.la

These are the source files that go into the shared library

_test_la_SOURCES =
test.cc
test_double_ff.cc

magic flags

_test_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version

link the library against some comon swig runtime code and the

c++ standard library

_test_la_LIBADD =
$(PYTHON_LDFLAGS)
-lstdc++

test.cc test.py: $(LOCAL_IFILES) $(ALL_IFILES)
$(SWIG) $(SWIGPYTHONARGS) -module test -o test.cc $(LOCAL_IFILES)

These headers get installed in ${prefix}/include/gnuradio

grinclude_HEADERS =
test_double_ff.h

These swig headers get installed in ${prefix}/include/gnuradio/swig

swiginclude_HEADERS =
$(LOCAL_IFILES)

MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc

Don’t distribute output of swig

dist-hook:
@for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done
@for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done


#7

On Fri, Feb 20, 2009 at 10:32:03AM +0100, Emil M. wrote:

Im still baning my head against the wall here, ive linked everything exactly
like in the example but it just gives the same error message on running the
tests.

If banging your head doesn’t help (I find a wooden table most
effective), check that the Makefile gets generated properly. If not,
restart from scratch with ‘make distclean && ./bootstrap &&
./configure’.

MB


#8

It happened to me once and I found that there was a problem with the way
I
wrote the SWIG interface file. Make sure that the .i file is correct. I
hope
it helps.

Thanks,
Ali