QTGUI Issue

Problem: I can’t use qtgui blocks. Wxgui blocks work. My system is
CentOS
6.6 running gnuradio 3.7.6 installed using pybombs.

Debug: I’ve run cmake in pybombs/gnuradio/src/build to make sure qtgui
was enabled during install, and it is. The only gnuradio components
disabled that are listed by cmake are doxygen, sphinx, gr-comedi and
gr-zeromq.

I then opened a terminal to test library imports. I can ‘import
gnuradio’
and I can ‘from gnuradio import wxgui’, as you would expect. When I try,
‘from gnuradio import qtgui’, I get the following output:

import gnuradio
from gnuradio import wxgui
from gnuradio import qtgui
Traceback (most recent call last):
File “”, line 1, in
File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/init.py”,
line 34, in
from qtgui_swig import *
File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/qtgui_swig.py”,
line 26, in
_qtgui_swig = swig_import_helper()
File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/qtgui_swig.py”,
line 22, in swig_import_helper
_mod = imp.load_module(’_qtgui_swig’, fp, pathname, description)
ImportError:
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0:
undefined symbol: _ZN7QwtPlot16staticMetaObjectE

*Conclusion: *There is a problem with my qtgui install but I don’t know
how
to debug any further to apply a fix. I’ve googled the traceback output
with
no luck. I’m hoping someone has come across and fixed this issue before
who
could explain what’s going on.

v/r,
Rich

Hi Richard,

this looks like you’ve installed a “good” version of QWT, which is used
when building GNU Radio, but when running a GNU Radio program, a
different version of the QWT library is loaded, which leads to missing
symbols.

My first approach would be to run ldd on
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0
, and see which qwt lib linux will try to load at runtime:
ldd
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0|grep
qwt.

Then search for files that have the same base name, in this case
libqwt.so .

Greetings,
Marcus

OK Marcus. The shared object file does exist in two directories. Full
output of comands below, with matches bolded:

ldd
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0
| grep qwt

  • libqwt.so.5 => /home/tsvcis/Documents/target/lib/libqwt.so.5
    (0x00007f5d2a4c1000)*

[tsvcis@tsvtester ~]$ sudo find / -name ‘libqwt.so.5*’
[sudo] password for tsvcis:
/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2.0
/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2
/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5
/home/tsvcis/Documents/target/lib/libqwt.so.5.2.0
/home/tsvcis/Documents/target/lib/libqwt.so.5.2
/home/tsvcis/Documents/target/lib/libqwt.so.5
/usr/lib64/libqwt.so.5
/usr/lib64/libqwt.so.5.1.1
/usr/lib64/libqwt.so.5.1

The only thing I could think to do was rename the files in /usr/lib64. I
don’t see this as having an effect. What should I do to resolve this
from
here?

Thanks a lot,
Rich

On Mon, Jan 26, 2015 at 11:31 AM, Marcus Müller
[email protected]

As it seems, at compile time, the 5.1.1 version was used, whilst at
runtime the 5.2.0 version from your ~/Documents/target prefix seems to
be found. That’s a bit strange, since pybombs should use the qwt version
that it downloaded (ie. 5.2.0 in your case). Maybe it’s all the other
way around…

If you

export LD_PRELOAD=/usr/lib64/libqwt.so.5

before running your GNU Radio application from the same terminal, does
it help? what about using export
LD_PRELOAD=/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5**?

Greetings,
Marcus

**

Executing ‘export LD_PRELOAD=/usr/lib64/libqwt.so.5’ allows me to run
‘from
gnuradio import qtgui’ from a python prompt successfully. However, when
I
start grc and attempt to run a flowgraph as a test, I still get this
error:

AttributeError: ‘module’ object has no attribute ‘QWidget’

I uninstalled all the qwt and pyqwt modules and all components pybombs
installed and started over.

I watched the qwt install closely. Pybombs installs through rpm the
following:

PyQwt-5.2.0
PyQwt-devel-5.2.0
qwt-5.1.1
qwt-devel-5.1.1

It first identified qwt-5.1.1 as being an invalid version number, but
when
I ran pybombs install again, it used those versions that the rpm had to
install. I’m not sure why it allows itself to download invalid versions.

If I try and force an install from source, it fails on pyqwt. I
attempted
to debug that further and got as far as configuring sip manually to
overcome a sip import error that causes the ‘source configure.py’ step
of
pyqwt to fail. This then lead to several qt errors, at which point I
stopped.

I’m struggling to figure out a solution.

Rich

On Mon, Jan 26, 2015 at 2:10 PM, Marcus Müller
[email protected]

Latest update: After uninstalling all the qwt and pyqwt that were
installed by yum, I tried a clean pybombs install, with everything
installed from source, and it completed.

Further debug commands now look like this:

[tsvcis@tsvtester ~]$ ldd
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0
|
grep qwt libqwt.so.5 => /home/tsvcis/Documents/target/lib/libqwt.so.5
(0x00007f414c468000)

Searching for libqwt.so.5 revelas:

[tsvcis@tsvtester ~]$ sudo find / -name 'libqwt.so.5’[sudo] password
for
tsvcis:
/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2.0/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5/home/tsvcis/Documents/target/lib/libqwt.so.5.2.0/home/tsvcis/Documents/target/lib/libqwt.so.5.2/home/tsvcis/Documents/target/lib/libqwt.so.5/usr/lib64/libqwt.so.5*

The major difference between now and before is the absence of
libqwt.so.5.1.1 files in /usr/lib64.

When I try to import qtgui, I get am still not able to.

*>>> import gnuradio>>> from gnuradio import qtguiSegmentation fault
(core
dumped)[tsvcis@tsvtester ~]$ *

When I start grc and try to run a flowgraph with a qt widget I get the
following error:

ImportError:
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0:
undefined symbol: _ZN7QwtPlot16staticMetaObjectE

Executing the following has no effect:
export
LD_PRELOAD=/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5

And executing the following:
export LD_PRELOAD=/usr/lib64/libqwt.so.5

leads to the following error when I start the python interpreter:
[tsvcis@tsvtester build]$ export LD_PRELOAD=/usr/lib64/libqwt.so.5
[tsvcis@tsvtester build]$ echo $LD_PRELOAD
/usr/lib64/libqwt.so.5
[tsvcis@tsvtester build]$ python
ERROR: ld.so: object ‘/usr/lib64/libqwt.so.5’ from LD_PRELOAD cannot be
preloaded: ignored.

This is a difference from before, as only the appropriate library path
seems to have an effect. But the bottom line is the same, qtgui does not
work.

Rich

On Mon, Jan 26, 2015 at 3:48 PM, Richard B. [email protected]

*Another update: *I’ve managed to get the libqwt.so files isolated to
the
pybombs install directories:

[tsvcis@tsvtester lib]$ sudo find / -name
libqwt.so.5’/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2.0/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5.2/home/tsvcis/Documents/pybombs/src/qwt5/lib/libqwt.so.5/home/tsvcis/Documents/target/lib/libqwt.so.5.2.0/home/tsvcis/Documents/target/lib/libqwt.so.5.2/home/tsvcis/Documents/target/lib/libqwt.so.5

but after all of this, I’m in the same boat as when we started. I get
the
following undefined symbol error when trying to use a QT block in grc:

ImportError:
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0:
undefined symbol: _ZN7QwtPlot16staticMetaObjectE

I could use some more debug help as I’m out of ideas. I’ve made sure the
only rpms installed related to qt are the base installs of qt3 and qt4
that
comes with my CentOS 6.6 distro. All the other qt related things, qwt,
qwt-devel, pyqwt and pyqwt-devel, are installed by pybombs from source.

One not obvious effect I’ve found is that if I try and import qtgui, I
get
the following error:

*[tsvcis@tsvtester lib]$ pythonPython 2.6.6 (r266:84292, Jan 22 2014,
09:42:36) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2Type “help”,
“copyright”, “credits” or “license” for more information.>>> import
gnuradio>>> from gnuradio import qtguiSegmentation fault (core
dumped)[tsvcis@tsvtester lib]$ *

However, if I import wxgui first, and then try to import qtgui, I get
the
symbol error I normally see in grc:

*[tsvcis@tsvtester lib]$ pythonPython 2.6.6 (r266:84292, Jan 22 2014,
09:42:36) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2Type “help”,
“copyright”, “credits” or “license” for more information.>>> import
gnuradio>>> from gnuradio import wxgui>>> from gnuradio import
qtguiTraceback (most recent call last): File “”, line 1, in
File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/init.py”,
line 34, in from qtgui_swig import * File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/qtgui_swig.py”,
line 26, in _qtgui_swig = swig_import_helper() File
“/home/tsvcis/Documents/target/lib64/python2.6/site-packages/gnuradio/qtgui/qtgui_swig.py”,
line 22, in swig_import_helper _mod = imp.load_module(‘_qtgui_swig’,
fp,
pathname, description)ImportError:
/home/tsvcis/Documents/target/lib64/libgnuradio-qtgui-3.7.7git.so.0.0.0:
undefined symbol: _ZN7QwtPlot16staticMetaObjectE>>> *

I’m only mentioning it in the chance it reveals something to someone.

Appreciate the help,
Rich

On Mon, Jan 26, 2015 at 5:47 PM, Richard B. [email protected]

Are you sure that you have only qwt5 on your system ?

I had such effects when there was qwt5 and qwt6 on my system.

– Volker

Am 27.01.2015 um 18:05 schrieb Richard B.:

I know it seems like there is a version issue going on, I agree. I’m as
certain as I can be given that the results of

sudo find / -name ‘qwt

returns only qwt5 directories and libqwt.so.5 shared objects and these
directories are all sub-directories of either pybombs or the pybombs
target
directory.

Really stumped!

I’ve been looking at my Ubuntu 14.04 setup, where QT works, and I
noticed
that qt4 is the only thing installed by default. On CentOS 6.6, both qt3
and qt4 are installed by default. Could this be the underlying issue to
everything? I really don’t have enough of a CS background to understand
how
these things play with each other. It’s difficult keeping track of qt,
qwt
and pyqwt I’ll tell you that. I’m removing qt3 and it’s dependencies
from
the default CentOS and trying a fresh install.

v/r,
Rich

Rich

Did you rebuild PyQWT & GR from scratch ?

I mean when you have this stack : Qt / Qwt / PyQWT / GR.

If you change anything, you need to rebuild anything above it. So
change Qt, you need to rebuild Qwt / PyQWt and GR from scratch or it
might be built against old headers that have incompatible ABI.

Cheers,

Sylvain

On Tue, Jan 27, 2015 at 5:28 PM, Richard B. [email protected]
wrote:

fails. I then install PyQWT through yum, because that works. Then I restart
the pybombs install the same way as before. It recognizes PyQWT as being
installed via rpm and continues until completion.

Rich

What’s the specific failure message for PyQWT in PyBOMBS? PyQWT is a
strange build process and depends on things being “right,” so that might
be
borking things right there. When using PyBOMBS, it’s best to stay inside
it
for everything possible, so when you see these errors occur, we should
focus on that instead of the problems that result from it.

Tom

You don’t get much from this error. Copy and pasted below:

*Installing from source: pyqt4Configuring: (100%)
[==========================================================]Configuration
failed. Re-trying with higher verbosity.make: *** No targets specified
and
no makefile found. Stop.Build failed. See output above for error
messages.[tsvcis@tsvcistester pybombs]$ *

I’ve recreated this error several times on clean CentOS 6.6 installs.

Rich

Yes I did ./pybombs remove, which uninstalls everything. I also have
pybombs set to install everything from source, so I know for sure what’s
being installed. All but PyQWT, because that source install is broken
for
some reason.

So the process is, I begin with

./pybombs install gnuradio

This installs all dependencies for gnuradio until it gets to PyQWT and
fails. I then install PyQWT through yum, because that works. Then I
restart
the pybombs install the same way as before. It recognizes PyQWT as being
installed via rpm and continues until completion.

Rich

I also realize I’ve been referring to PyQWT in previous emails as the
problem, mistakingly. I meant to be saying PyQT4, as the previous thread
output error shows. Apologies for the confusion.

pyqt4 is the component which fails source installs on my fresh centos
6.6.

Rich

On Wed, Jan 28, 2015 at 8:42 AM, Richard B. [email protected]

If I attempt to manually configure the pyqt4 source that pybombs
installed
to pybombs/src/pyqt4, by executing the configure command I found in
pyqt4’s
recipe file, the following errors occur:

[tsvcis@tsvtester pyqt4]$ python configure.py --confirm-license -b
$prefix/bin -d $prefix/lib/python2.6/site-packages/ -v
$prefix/share/sip/
–verboseDetermining the layout of your Qt
installation…/usr/lib64/qt-3.3/bin/qmake -o qtdirs.mk
http://qtdirs.mk
qtdirs.pro http://qtdirs.promake -f qtdirs.mk http://qtdirs.mkg++ -c
-pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic
-fno-strict-aliasing -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT
-DQT_THREAD_SUPPORT -I/usr/lib64/qt-3.3/mkspecs/default -I.
-I/usr/lib64/qt-3.3/include -o qtdirs.o qtdirs.cppqtdirs.cpp:1:17:
error:
QFile: No such file or directoryqtdirs.cpp:2:24: error: QLibraryInfo: No
such file or directoryqtdirs.cpp:3:23: error: QTextStream: No such file
or
directoryqtdirs.cpp: In function ‘int main(int, char
*)’:qtdirs.cpp:7:
error: ‘QFile’ was not declared in this scopeqtdirs.cpp:7: error:
expected
‘;’ before ‘outf’qtdirs.cpp:9: error: ‘outf’ was not declared in this
scopeqtdirs.cpp:9: error: ‘QIODevice’ has not been declaredqtdirs.cpp:9:
error: ‘QIODevice’ has not been declaredqtdirs.cpp:9: error: ‘QIODevice’
has not been declaredqtdirs.cpp:12: error: ‘QTextStream’ was not
declared
in this scopeqtdirs.cpp:12: error: expected ‘;’ before
‘out’qtdirs.cpp:14:
error: ‘out’ was not declared in this scopeqtdirs.cpp:14: error:
‘QLibraryInfo’ has not been declaredqtdirs.cpp:14: error: ‘QLibraryInfo’
has not been declaredqtdirs.cpp:15: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:15: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:16: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:16: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:17: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:17: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:18: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:18: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:19: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:19: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:21: error: ‘QT_VERSION’ was not declared in this
scopeqtdirs.cpp:22: error: ‘QT_EDITION’ was not declared in this
scopeqtdirs.cpp:24: error: ‘QLibraryInfo’ has not been
declaredqtdirs.cpp:90: error: ‘qreal’ was not declared in this
scopemake:
*** [qtdirs.o] Error 1Error: Failed to determine the layout of your Qt
installation. Try again usingthe --verbose flag to see more detail about
the problem.[tsvcis@tsvtester pyqt4]$*

Keep in mind, this error is very different then the error pybombs
reports
during the automatic install. This leads me to believe my manual install
may be leaving out configure information that is required by pyqt4 that
pybombs normally handles. I’m just not sure.

On Wed, Jan 28, 2015 at 10:30 AM, Richard B. [email protected]

On Wed, Jan 28, 2015 at 2:06 PM, Richard B. [email protected]
wrote:

installation…/usr/lib64/qt-3.3/bin/qmake -o qtdirs.mk http://qtdirs.mk
qtdirs.pro http://qtdirs.pro*

^^^^^^^^^^^^^^^^^

I think there’s a large part of the problem. It’s trying to use a QT 3.3
installation instead of QT4. That’s certainly not going to work. You
likely
don’t need QT3 for anything anymore (I hope), so try getting rid of this
and making sure there is only one version of QT4 installed.

Also remember that pybombs has a ‘-v’ flag you can pass to it to provide
more version output.

Tom