On Sunday 20 March 2005 09:52, Akos Polster wrote: > So now I can build PyKDE with GCC 4.0 but I'm getting some undefined > symbols while running (a slightly modified) importTest.py. What am I > missing? > > Testing PyKDE module imports > > Modules built: > dcop kdecore kdesu kdefx kdeui kio kutils kfile kparts khtml kspell > kdeprint kmdi > > Importing: > > dcop > kdecore > kdesu > Traceback (most recent call last): > File "importTest.py", line 22, in ? > exec ("import " + mod) > File "<string>", line 1, in ? > ImportError: /usr/lib/python2.4/site-packages/kdesu.so: undefined symbol: > _ZN7KCookie16setDcopTransportERK8QCString
KDE has decided to not export some symbols. The mechanism used is the __attribute__ feature of gcc, but the export stuff isn't enabled for gcc<3.4. I assume it's in effect for gcc 4. You can unmangle the missing symbols using c++filt: [EMAIL PROTECTED]:~> c++filt _ZN7KCookie16setDcopTransportERK8QCString KCookie::setDcopTransport(QCString const&) and then in kdesu/kcookie.sip, comment out (// or /* */) setDCOPTransport. Repeat for each missing symbol. Looking at the KDE source in this particular instance, there isn't anyway to tell that KCookie::setDCOPTransport isn't exported. That may mean it's peculiar to the distribution you're using (that kind of variability has always been the case with KDE/PyKDE). If you find a case where the .sip file doesn't explicitly declare the missing method, that would indicate the entire class that the missing method is a member of hasn't been exported (sip generates code for each inherited method too). From what I've seen, your listing looks fairly complete. At any rate, I don't have a gcc >= 3.4 based distribution available yet (maybe the next SuSE release next month?), so I don't see any way to identify these ahead of time. PyKDE is generated from the kdelibs h files as defined in the source files from kde.org. Until I have a distribution with a more recent gcc version than 3.3.x, and until there's some indication of how consistent this will be among the various distributions, there isn't much I can do about it. If you need to use gcc >= 3.4, you'll have to patch, or you can try the kde-bindings version of PyKDE (d/l either the KDE 3.4 source, rpms or CVS) which I believe Simon has patched for this problem. I don't know if that version has all of the changes for KDE 3.4.0 incorporated yet (there are a fair number of new methods and some new classes), but the missing material probably won't be a major drawback. Jim _______________________________________________ PyKDE mailing list PyKDE@mats.imk.fraunhofer.de http://mats.imk.fraunhofer.de/mailman/listinfo/pykde