[PyKDE] PyKDE-snapshot20060118 runtime failure when built with gcc295 (KConfigSkeleton)

Jim Bublitz jbublitz at nwinternet.com
Sun Jan 22 23:15:46 GMT 2006


On Sunday 22 January 2006 13:57, Danny Pansters wrote:
> gcc version 2.95.4            <-- This is on FreeBSD4

> Post-install it imports dcop*.py to byte compile them (sorry if spacing may
> be messed up a bit):
>
> ( install -c -o root -g wheel -m 555
> /work/a/ports/x11-toolkits/py-kde/work/PyKDE-snapshot20060118/contrib/kdepy
>uic /usr/local/bin &&  cd /usr/local/lib/python2.4/site-packages
> &&  /usr/local/bin/python -c "import pykdeconfig, dcopexport, dcopext"
> &&  /usr/local/bin/python -O -c "import pykdeconfig, dcopexport, dcopext" )
> Traceback (most recent call last):
>   File "<string>", line 1, in ?
>   File "dcopexport.py", line 53, in ?
>     from kdecore import dcop_add, dcop_next
> ImportError: ./kdecore.so: Undefined symbol
> "_$_Q250meth_KConfigSkeleton_addItemDouble__FP7_objectT0.0_12PyItemDouble.9
>798" *** Error code 1

> Hmm. So it builds alright but if this already goes wrong it would indicate
> (at least one, probably more) runtime problems when built with gcc295. Note
> KDE, sip, etc are up-to-date.

This is pretty weird, as PyItemDouble should be resolved within kdecore.so 
itself. The C++ code looks like:

static PyObject *meth_KConfigSkeleton_addItemDouble(PyObject *sipSelf,
                                  PyObject   *sipArgs)
{

   ...

    class PyItemDouble : public KConfigSkeleton::ItemDouble
    {
     ...
    };

  ...

};

It's no different than defining a struct local to a method, and if gcc can 
compile it, it should be able to link it correctly I'd think.

Are you sure the new kdecore.so has been installed before you're trying to 
compile dcopexport.py?

> I could try forcing the build on my gcc34 system to use gcc295 and I should
> get the same troubles if that's of any use (this log was sent to me). Are
> any of the Linux folks still making packages for gcc295 based distros?
>
> Obviously I'm also asking because the KConfigSkeleton stuff has been
> reworked, kinda hoping for an easy fix.

What I'd try first is moving the class declaration outside of the method, 
which isn't hard,  but requires a lot of editing.

A couple things to check:

1. Make sure the new kdecore.so is installed before compiling.
2. Run python importTest.py from the top level PyKDE directory - that should 
catch all unresolved symbols (but usually only the first on any given run).
3. In sip/kconfigskeleton.sip, comment out addItemDouble (including everything 
from %MethodCode to %End) and rebuild/recompile PyKDE:

python configure.py -lkdecore && make && su -c"make install"

will rebuild/recompile only kdecore (the switch is a lower case L). If it's a 
problem with the syntax, another addItem* or Item* ctor should be unresolved 
the next time you try to import kdecore.

I don't have a gcc 2.95 version up, but I'll fire up an older box and see if I 
have it there (have to do it to backtest to KDE 3.0 anyway).

I'll see what I can figure out.

Jim




More information about the PyQt mailing list