Jump to content
ocumo

R6_1(64) (Free) doesn't run in Kubuntu 15.04 - Two kinds of errors

Recommended Posts

R6_1(64) (Free) doesn't run in Kubuntu 15.04

Two kind of errors, one easily fixable, but the other not:

1) Permissions.  The downloaded Spriter_free.tar.gz package has several libraries (lib*.so and lib*.so.*) with wrong permissions. While the majority of them have permissions 755 (correct), some like libsteam_api.so among others, have permissions 600 (i.e., only rw for owner and nothing for others) or 664 or even 664.

If we unpack Spriter_free.tar.gz in our $HOME directory and then copy the resulting directory to e.g.  /opt/, then when we run Sprite like so:

/opt/SpriterR6_1(64)/Sprite

the permissions problem will generate the error:

error while loading shared libraries: libsteam_api.so: cannot open shared object file: No such file or directory

The "missing" file is not missing, it's there in the same directory as Sprite executable, but it has wrong permissions.   This issue can be fixed easily if we change permissions in the $HOME/SpriterR6_1(64) directory (so, preferable before copying to any other path like /opt/) like this (assuming we are in $HOME):

chmod 755 SpriterR6_1\(64\)/*.so
chmod 755 SpriterR6_1\(64\)/*.so.*

This solves the first error.  BUT:

2) Incompatible library.   When we launch Spriter -with its permissions fixed per above- from either a subdirectory of $HOME or e.g. from a subdirectory in /opt/, we get a different error:

Cannot mix incompatible Qt library (version 0x50401) with this library (version 0x50501)
Aborted (core dumped)

This error is more complicated.  What Qt library?  With the command

ldd -v ./Spriter | grep Qt | less

I can see the following:

libQt5OpenGL.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5OpenGL.so.5 (0x00007fa276559000)
libQt5Help.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Help.so.5 (0x00007fa2762ca000)
libQt5WebKitWidgets.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5WebKitWidgets.so.5 (0x00007fa276083000)
libQt5Widgets.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Widgets.so.5 (0x00007fa275804000)
libQt5Multimedia.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Multimedia.so.5 (0x00007fa275520000)
libQt5Gui.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Gui.so.5 (0x00007fa274d0e000)
libQt5Network.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Network.so.5 (0x00007fa2749b5000)
libQt5Script.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Script.so.5 (0x00007fa274528000)
libQt5Core.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Core.so.5 (0x00007fa273de2000)
libQt5Sql.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Sql.so.5 (0x00007fa271473000)
libQt5CLucene.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5CLucene.so.5 (0x00007fa271172000)
libQt5WebKit.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5WebKit.so.5 (0x00007fa26ebba000)
libQt5Sensors.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Sensors.so.5 (0x00007fa26c48f000)
libQt5Positioning.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Positioning.so.5 (0x00007fa26c252000)
libQt5PrintSupport.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5PrintSupport.so.5 (0x00007fa26bfe4000)
libQt5Quick.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Quick.so.5 (0x00007fa266090000)
libQt5Qml.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Qml.so.5 (0x00007fa265a61000)
libQt5WebChannel.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5WebChannel.so.5 (0x00007fa265843000)

But:  what now? 

Thanks in advance for any hints of how to fix or at least how to further troubleshoot this issue, as I am very interested in testing this program.

 

Share this post


Link to post
Share on other sites

Just an update.

After some research, I found a post of a similar kind of issue on a different program , and got curious.  I managed to make some progress by moving the *Qt*.so.* libraries to a separate directory --which seems to force Sprite to use the system's Qt libraries. So, first I run this command, from the Sprite directory:

mkdir QtLibs && mv *Qt*.so* QtLibs

And then run ./Sprite. The program actually started, asking to select an option for the updates, but when I selected the default option and clicked OK, the program crashed (closed) and gave the following error:

./Spriter: symbol lookup error: ./Spriter: undefined symbol: _ZN7QString14toUpper_helperERKS_

Note: The problem was exactly the same before and after I fixed the permissions of the *.so and *.so.* files to 755.

Now, after that crash, any time I run ./Spriter, I get the same error, but the program does not show up at all:

$ ./Spriter 
BrashMonkey Spriter - Version r6

Setting up main window...
Successful.

Initializing model...
Successful.

Setting up widgets...
"Theme tree: (Breeze)"
Successful.

Setting up graphics viewport with openGL...
Successful.

Querying user for update settings...
Successful.

Checking for stable or beta updates...
Successful.

./Spriter: symbol lookup error: ./Spriter: undefined symbol: _ZN7QString14toUpper_helperERKS_
$ echo $?
127
$

I am not sure, but this new error might confirm that an incompatible library is being used?   If so, which one and how do I proceed from here?

To investigate this a bit more, I tried the command nm like this:

$ cd QtLibs/	# Change to where I've moved all *Qt*.so* libraries
$ for file in *; do nm -D --print-file-name $file ; done  # long output! use grep

The command nm lists symbols from object files. In this case, looking through those *Qt* files, the output is big, but using grep it is easy to filter, like so:

$ for f in *; do nm -D --print-file-name $f ; done | grep _ZN7QString14toUpper_helperERKS_
libQt5Core.so.5:00000000001387a0  T _ZN7QString14toUpper_helperERKS_
libQt5Network.so.5:               U _ZN7QString14toUpper_helperERKS_
libQt5Qml.so.5:                   U _ZN7QString14toUpper_helperERKS_
libQt5Script.so.5:                U _ZN7QString14toUpper_helperERKS_
libQt5Sql.so.5:                   U _ZN7QString14toUpper_helperERKS_
libQt5Widgets.so.5:               U _ZN7QString14toUpper_helperERKS_
$

According to the manpages of nm,  the leading "T" means "The symbol is in the text (code) section" and the leading "U" means "The symbol is undefined";  which is what the error message says.  Thus, the symbol is "undefined" for libQt5Network.so.t, libQt5Qml.so.5, libQt5Script.so.5, libQt5Sql.so.5 and libQt5Widgets.so.5 .

I am open to suggestions !!!

Thanks in advance

 

Edited by ocumo
Found more relevant information

Share this post


Link to post
Share on other sites

Sorry Spriter isn't launching for you, and thanks for all the info.  Do you know which version of Qt installs with Kubuntu?  If it's 5.4.1, see if you can upgrade to 5.5.1, and whether or not it solves the problem?

Share this post


Link to post
Share on other sites

Hi Lucid,

Thanks for your prompt reply.

A quick aptitude show libqt5gui5 tells me : Version: 5.4.1+dfsg-2ubuntu4.1

Upgrading now to 5.5.1 could be cumbersome, as the current latest package for 15.04 seems to be that one; I would prefer postpone that experiment for now;  I am still, nevertheless, trying a few experiments, like setting LD_LIBRARY_PATH and 'export LD_DEBUG=bindings' to see more details about the symbols.  I'll post my findings if I get anything interesting.   This is a troubleshooting that I am not very familiar with, but I am trying my best, reading all what I can, though tips are welcome :-)

Share this post


Link to post
Share on other sites

After some experimentation, I did not have much success. The best I had was to get Spriter running but when I tried the menu "File --> Open " then the program just crashed immediately, with the message in the console:

Cannot mix incompatible Qt library (version 0x50401) with this library (version 0x50501)
Aborted (core dumped)

For whatever is worth, just to mention that I got this "best" result, after just putting back the libQt*.so* files in the same directory as the Spriter executable. And then I collected the ldd information, to compare with what I showed in my first post.  It is a bit different now, in which several of the "sofiles" are not pointing to the local Spriter directory, but I doubt this is relevant:

$ ldd ./Spriter | grep 'Qt' 
  libQt5OpenGL.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5OpenGL.so.5 (0x00007f49b2fe4000)
  libQt5Help.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Help.so.5 (0x00007f49b2d55000)
  libQt5WebKitWidgets.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5WebKitWidgets.so.5 (0x00007f49b2b0e000)
  libQt5Widgets.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Widgets.so.5 (0x00007f49b228f000)
  libQt5Multimedia.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Multimedia.so.5 (0x00007f49b1fab000)
  libQt5Gui.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Gui.so.5 (0x00007f49b1799000)
  libQt5Network.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Network.so.5 (0x00007f49b1440000)
  libQt5Script.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Script.so.5 (0x00007f49b0fb3000)
  libQt5Core.so.5 => /home/myUser/SpriterR6_1(64)/./libQt5Core.so.5 (0x00007f49b086d000)
  libQt5Sql.so.5 (0x00007f49adefe000)
  libQt5CLucene.so.5 (0x00007f49adbfd000)
  libQt5WebKit.so.5 (0x00007f49ab645000)
  libQt5Sensors.so.5 (0x00007f49a8f1a000)
  libQt5Positioning.so.5 (0x00007f49a8cdd000)
  libQt5PrintSupport.so.5 (0x00007f49a8a6e000)
  libQt5Quick.so.5 (0x00007f49a2b1b000)
  libQt5Qml.so.5 (0x00007f49a24eb000)
  libQt5WebChannel.so.5 (0x00007f49a22ce000)

Also, in case this is useful, I looked into the debugging logs from setting 'LD_DEBUG=bindings' (shows information about symbol binding) and looked for the symbol that was previously "undefined". The file is huge, but contains this line:

6670:	binding file ./Spriter [0] to /home/myUser/SpriterR6_1(64)/libQt5Core.so.5 [0]: normal symbol `_ZN7QString14toUpper_helperERKS_'

Which means it is not undefined any more, which could be explained by the fact that initially I had moved the libQt*.so* files to another directory and the program was looking for the symbol in the system's library instead.

So far my guess is that all of this is consistent with an in compatible library from Sprite's Qt libraries (v5.5.1?) that "cannot be mixed" with the Qt5 v5.4.1 libraries that are in Kubuntu 15.04.  

However, since (perhaps obsolete?) shared libraries documentation state:

Quote

Fortunately, on Unix-like systems (including Linux) you can have multiple versions of a library loaded at the same time, so while there is some disk space loss, users can still run ``old'' programs needing old libraries.

... I wonder, if this is not just completely obsolete nowadays, and if one could read this the other way around: "run a newer program needing newer libraries",  whether there would be a way of doing this without fully upgrading my kubuntu 15.04, which for now is very inconvenient and cumbersome.   

If the answer is "no", then please, may I kindly urge you guys to update your download page and explicitly say there what are the requirements and/or supported Linux systems, to avoid the pain of so many hours of difficult troubleshooting and frustration to many potential users/customers for your great product. 

Thanks again!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...