|
From: Ernst B. <e.b...@xe...> - 2006-02-18 20:54:41
|
On Saturday 18 February 2006 18:23, Julian Brown wrote: > I am sure this is a problem with the way the perl plugin was built but > not sure what. > > First I am using the Procedure Ernst showed me for building on Linux > with the compat dirs. > > Anyway find attached the Makefile in the scripting/perl directory > generated by qmake. > > When I bring up xpertmud, I load frontiers.xmud then connect to > btmux.com 5555 then type my connect message to login to the site. I > imediately get these errors: > > Can't load '/usr/lib/perl5/5.8.7/i686-linux/auto/IO/IO.so' for module IO: > /usr/lib/perl5/5.8.7/i686-linux/auto/IO/IO.so: undefined symbol: > PL_sv_undef at > /usr/lib/perl5/5.8.7/i686-linux/XSLoader.pm line 68. > at /usr/lib/perl5/5.8.7/i686-linux/IO.pm line 11 > Compilation failed in require at > /usr/lib/perl5/5.8.7/i686-linux/IO/Handle.pm > line 260. > ... > > The message is much longer, but that last part with module IO is the > problem. On linux it won't be possible to use perl modules implemented as .so file with the compat/klibloader. You'll have to remove all those modules from your scripts while debugging the qt-only version. (It's probably the battlerecorder using IO::File, which inherits IO::Handle) Reason is that QLibrary loads the scriptinterpreter as "private" library, all symbols are hidden and not exported to the app codespace. Now if perl wants to load a .so module, it can't link it because the perl symbols needed for it are all hidden. Windows afaik hasn't support for hidden symbols, so here perl modules can be loaded with that implementation. (All perl symbols are global here by default) On the Linux/KDE version, this isn't a problem as well, here the special "globalLibrary" method of KLibLoader is used, which loads the library and exports all its symbols. Not sure about MacOS X / Darwin, has been ages since I last compiled it there. As a workarround you could also try to use only the KDE KLibLoader and keep the rest of the compat dir, but that would probably require major tweaks to the makefiles... /Ernst |