Saleae

Problem with libssl.so and Alpha Releases

Hi
I have tried to run the new Alpha Release 5 (and also tested on all other Alpha Releases) on Solus Linux distribution and ran into the following error while starting the AppImage:

/tmp/.mount_Logic-U4M1Gm/usr/bin/Logic: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc

The installed OpenSSL Version is 1.0.2r. Do you have any idea how to solve this problem ?

Is this related? Alpha 5 connecting the HW

Sorry for my late reply!

I’ve spent a good chunk of time the day before last working on the similar problem for MacOS, and we’ve seen similar problems on Linux before.

Our AppImage actually contains its own copy of OpenSSL, and from your error, I’m not sure how it ever worked. The error message your showing indicates that our software loaded the libssl.so.1.0.0 that’s included in the AppImage, not the copy that’s installed on your system.

After my most recent experience with packaging OpenSSL on MacOS, I think the right solution is for us to statically link the library. I don’t think this will make it into the next release, which has a huge set of changes already, but it shouldn’t be long after that.

We’re not doing much with OpenSSL, and I think statically linking it will fix a long tail of problems like this for our Linux and MacOS users. Especially on MacOS, which ships with an ancient version of OpenSSL.

Alphas 1-5 are an unusual build, since they actually add the new software backend (called graph-io) to the existing Logic binary, which is then packaged into an AppImage.

The next build completely drops the old Logic codebase and binary. It also uses Electron instead of requiring the user to have Chrome installed. It also uses Electron for packaging, so instead of an AppImage, we’ll release a deb and rpm package. This packaging system will not include a copy of OpenSSL.

Now that I’m thinking about it, we’ll still need a solution for libstdc++. we use a version if libstdc++ that’s pretty new, and not stock on most distros.

With AppImage, there was a handy feature to ship with a newer copy of libstdc++, but only actually use it if it’s newer than the user’s copy. With a deb package, it’s slightly more of a hassle for the user. It should be very easy for customers to install libstdc++ if required, I think using this convention:

sudo dpkg -i /path/to/deb/file
sudo apt-get install -f

This is because we’re compiling with gcc 7 and using C++17 library features.

No problem… I’m still using the stable version of the Logic software. I tried the Alpha version for short test (because a colleague of mine used my Logic Analyzer and thinks about to buy one by itself).

I’m not very familiar with AppImage files. I did extracted the AppImage file content and could not find the libssl.so in the extracted files. As you wrote you are using your own version of OpenSSL, where can I find it ?

BTW: You also wrote you will deliver the next version as DEB and RPM package. Would it also be possible to deliver it as a tarball (tar.gz) because my Linux distribution can not handle RPM or DEB package files.

I extracted the app using --appimage-extract. You can find the included copy of OpenSSL at the relative directory squashfs-root/usr/share/doc/libssl1.0.0 and squashfs-root/usr/lib/libcrypto.so.1.0.0.

Now that you’ve extracted the AppImage, could you send me the output of ldd?

ldd squashfs-root/usr/bin/Logic

Mine looks like this:

linux-vdso.so.1 =>  (0x00007ffcd817a000)
	libanalyzer.so => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libanalyzer.so (0x00007f6d6237c000)
	libcrypto.so.1.0.0 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libcrypto.so.1.0.0 (0x00007f6d61f25000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6d61d08000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6d61b04000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f6d618fc000)
	libQt5Sql.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Sql.so.5 (0x00007f6d616b4000)
	libQt5Positioning.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Positioning.so.5 (0x00007f6d61423000)
	libQt5Network.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Network.so.5 (0x00007f6d6108e000)
	libQt5Widgets.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Widgets.so.5 (0x00007f6d6084a000)
	libQt5Gui.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Gui.so.5 (0x00007f6d6004e000)
	libQt5Core.so.5 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libQt5Core.so.5 (0x00007f6d5f8f4000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6d5f511000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6d5f208000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6d5eff0000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6d5ec26000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f6d626ce000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6d5ea0c000)
	libGL.so.1 => /usr/lib/nvidia-390/libGL.so.1 (0x00007f6d5e6cf000)
	libicui18n.so.56 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libicui18n.so.56 (0x00007f6d5e236000)
	libicuuc.so.56 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libicuuc.so.56 (0x00007f6d5de7e000)
	libicudata.so.56 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libicudata.so.56 (0x00007f6d5c49b000)
	libgthread-2.0.so.0 => /home/build/Downloads/alpha5/squashfs-root/usr/bin/../lib/libgthread-2.0.so.0 (0x00007f6d5c298000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f6d5bf87000)
	libnvidia-tls.so.390.87 => /usr/lib/nvidia-390/tls/libnvidia-tls.so.390.87 (0x00007f6d5bd83000)
	libnvidia-glcore.so.390.87 => /usr/lib/nvidia-390/strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXXlibnvidia-glcore.so.390.87 (0x00007f6d59f7b000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f6d59c41000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f6d59a2f000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f6d597bf000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f6d5959d000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f6d59399000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f6d59193000)

You can try running it now that it’s extracted, using the usr/bin/Logic file, but I expect you will run into more trouble. In the ldd output from mine, there is this line:

libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6d5f511000)

Looks like our app requires at least version 3.4.22, and we include 3.4.26 located at squashfs-root/usr/optional/libstdc++.so.6/libstdc++.so.6

It might be possible to get around the issue by using LD_LIBRARY_PATH to help Logic load up the copy of libstdc++ we included (if yours isn’t new enough) and pick up the copy of libssl and libcrypto you have installed natively.

You can check the version of libstdc++ you have installed with this:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

I wouldn’t put too much effort into this - we’re trying to get the next release out next week (there is still a lot of problems that need to get fixed first) but that release completely changes how we package. Unfortunately, that means it might have its own set up unrelated problems too, we will see.

Lastly, do you know is Solus Linux is based on another flavor? Eventually, I’d like to do some automated testing on popular distros like fedora, Ubuntu, and Debian. It’s not realistic to setup many more than that (I haven’t heard of Solus Linux before) but if your distro is similar to one of the larger ones we might be able to find bugs like this earlier on. Right now we’re only testing using Ubuntu 16.04.

Thank you very much for your answer. Sorry, I looked for ibssl.so and not for libcypto.so.
The libcrypto.so is of course available.

I extracted the AppImage file and tried to start from there. The error is still the same.

Here is the output of ldd squashfs-root/usr/bin/Logic :

linux-vdso.so.1 (0x00007fff7d9a9000)
libanalyzer.so => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libanalyzer.so (0x00007fe27eb7b000)
libcrypto.so.1.0.0 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libcrypto.so.1.0.0 (0x00007fe27e724000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fe27e6eb000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fe27e6e5000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007fe27e6db000)
libQt5Sql.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Sql.so.5 (0x00007fe27e493000)
libQt5Positioning.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Positioning.so.5 (0x00007fe27e200000)
libQt5Network.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Network.so.5 (0x00007fe27de6b000)
libQt5Widgets.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Widgets.so.5 (0x00007fe27d627000)
libQt5Gui.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Gui.so.5 (0x00007fe27ce2b000)
libQt5Core.so.5 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libQt5Core.so.5 (0x00007fe27c6d1000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fe27c53b000)
libm.so.6 => /usr/lib/haswell/libm.so.6 (0x00007fe27c3fa000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fe27c3df000)
libc.so.6 => /usr/lib/haswell/libc.so.6 (0x00007fe27c1f6000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fe27eecf000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007fe27c1dd000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007fe27c149000)
libicui18n.so.56 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libicui18n.so.56 (0x00007fe27bcae000)
libicuuc.so.56 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libicuuc.so.56 (0x00007fe27b8f6000)
libicudata.so.56 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libicudata.so.56 (0x00007fe279f13000)
libgthread-2.0.so.0 => /home/roland/Downloads/test/squashfs-root/usr/bin/../lib/libgthread-2.0.so.0 (0x00007fe279d10000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007fe279bee000)
libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007fe279bb7000)
libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007fe279afa000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007fe279a82000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fe279922000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fe2798f4000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fe2798ed000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fe2798e4000)

I also checked the version of my installed libstdc++. It shows me version 3.4.25.

Unfortunately, (of course, it all depends on the point of view) Solus Linux does not base on any other distribution. I understand that you cannot support all distributions, therefore the question of a tarball archive. In the past I actually had good experiences with software that was not available through the software manager of Solus Linux and could be installed via a tarball archive.

BTW: You are right, we will see what the future brings… it’s still an alpha version. I think I will have an eye on it and will check the status of the software from time to time.