Project

General

Profile

Qub problems » History » Version 2

« Previous - Version 2/4 (diff) - Next » - Current version
Savko, Martin, 16/10/2012 12:00 PM


Qub problems

Motivation

I’ve been working on centering mxCuBE application recently. I run into several problems while trying to get there. Resolved them :-) and I would like to share the experience on this forum.

The systems I’ve been working on are Ubuntu 10.04 64bit and Ubuntu 12.04 32 bit.

To make the MD2 camera working I needed to compile qttools.so module from Qub/CTools. There were several issues to sort out before I got there.

Setup

First: qttools from Qub/CTools are not compiled by default. Qub’s setup.py does not refer to this submodule (and two other submodules: opencv and qwttools). This is not fatal but would be more comfortable to have it there.

qttools

The real issue was getting qttools compiled. After descending to Qub/CTools/qttools and running custom configure.py (python configure.py && make) I was getting bizarre error messages. This is the critical part of the output:

...
g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -O1 -fPIC -Wall -W -D_REENTRANT -DNDEBUG -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I. -I/usr/include/python2.7 -I/usr/share/qt3/mkspecs/default -I/usr/share/qt3/include -I/usr/X11R6/include -o sipqttoolsQtXEmbedContainer.o sipqttoolsQtXEmbedContainer.cpp
In file included from /usr/share/sip/qt/qt/qvariant.sip:201:0:
/usr/share/qt3/include/qvariant.h:111:2: error: expected identifier before ‘int’
/usr/share/qt3/include/qvariant.h:111:2: error: expected ‘}’ before ‘int’
/usr/share/qt3/include/qvariant.h:111:6: error: expected unqualified-id before ‘,’ token
...

(see full output ).

To make long story short it was possible to get around the problem making changes to qvariant.h file from qt3 distribution (/usr/include/qt3/qvariant.h on my system). The change that finally made thing working was to undefine three variables: Int, UInt and Bool. This is the required change in the form of patch

--- qvariant.h    2012-10-16 11:13:15.341595088 +0200
+++ qvariant.h_working    2012-10-16 11:15:19.557591418 +0200
@@ -82,6 +82,10 @@
 template <class Key, class T> class QMapConstIterator;
 #endif

+#undef Int
+#undef UInt
+#undef Bool
+
 class Q_EXPORT QVariant
 {
 public:

after this change the compilation started to succeed.

linking to python

Although the library now was compiled, there was still a minor issue with linking to python libraries:

$ ldd -r qttools.so 
    linux-gate.so.1 =>  (0xb76ff000)
    libqt-mt.so.3 => /usr/lib/libqt-mt.so.3 (0xb6f58000)
    libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb6e24000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6e08000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6d23000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6d05000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6b5b000)
    libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb6b27000)
    libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb6b0d000)
    libjpeg.so.8 => /usr/lib/i386-linux-gnu/libjpeg.so.8 (0xb6ab6000)
    libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb6a8c000)
    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6a76000)
    libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xb6a66000)
    libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb6a5b000)
    libXrandr.so.2 => /usr/lib/i386-linux-gnu/libXrandr.so.2 (0xb6a52000)
    libXcursor.so.1 => /usr/lib/i386-linux-gnu/libXcursor.so.1 (0xb6a47000)
    libXinerama.so.1 => /usr/lib/i386-linux-gnu/libXinerama.so.1 (0xb6a43000)
    libXft.so.2 => /usr/lib/i386-linux-gnu/libXft.so.2 (0xb6a2d000)
    libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb6992000)
    libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb6980000)
    libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb6977000)
    libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb695d000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6958000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb692b000)
    libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb690a000)
    /lib/ld-linux.so.2 (0xb7700000)
    libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb68e0000)
    libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb6884000)
    libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb6880000)
    libXfixes.so.3 => /usr/lib/i386-linux-gnu/libXfixes.so.3 (0xb6879000)
    libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb6873000)
    libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb686c000)
undefined symbol: PyCapsule_Type    (./qttools.so)
undefined symbol: _Py_NoneStruct    (./qttools.so)
undefined symbol: PyDict_GetItemString    (./qttools.so)
undefined symbol: PyModule_GetDict    (./qttools.so)
undefined symbol: Py_InitModule4    (./qttools.so)
undefined symbol: PyImport_ImportModule    (./qttools.so)
undefined symbol: PyCapsule_GetPointer    (./qttools.so)
undefined symbol: PyLong_FromUnsignedLong    (./qttools.so)
undefined symbol: PyInt_FromLong    (./qttools.so)
undefined symbol: PyBool_FromLong    (./qttools.so)

To get around this problem I edited Makefile and added -lpython2.7 to LIBS variable. Here is the workaround in the form of a patch

--- Makefile    2012-10-16 11:24:25.805575278 +0200
+++ Makefile_working    2012-10-16 11:24:16.693575546 +0200
@@ -9,7 +9,7 @@
 CFLAGS = -pipe -g -fPIC -O2 -Wall -W -D_REENTRANT
 CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -O1 -fPIC -Wall -W -D_REENTRANT
 LFLAGS = -shared -Wl,--version-script=qttools.exp
-LIBS = -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
+LIBS = -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread -lpython2.7
 MOC = /usr/share/qt3/bin/moc
 .SUFFIXES: .c .o .cpp .cc .cxx .C

Acknowledgement

I would like to acknowledge great help from Frederick Picca in sorting out the qttools problem.