It is simple to realize that we are facing a compatibility problem between libraries versions.
Let's take an environment with this problem to see the solution:
- OS: Ubuntu 20.04 (amd64)
- Software: Vectr 0.1.15 (Vector Graphics
Editor)
In this case when trying to open it, nothing happens, it does not open, but it does not show an error either, the error only comes out when trying to launch Vectr from a terminal (./vectr
).
First, let's look at the dependencies that may be causing the error:
:~/Downloads/Vectr$ ldd vectr | grep pango
libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f4ab3581000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f4ab33e7000)
libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f4ab1b3b000)
This can be done in different ways, just ask Google.
If you want to see the details of the libraries that you have installed, you can use the next command. Note that the second column indicates the version:
:~/Downloads/Vectr$ dpkg -l | grep libpango
ii libpango-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpango-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
ii libpangocairo-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpangocairo-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
ii libpangoft2-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpangoft2-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
First solution
Since the error is only affecting one software, I don't think it is convenient to downgrade the libraries that are installed on the system (second solution), which may affect other softwares.
So, this solution consists of copying the libraries (old versions) to the root of the folder where the software is, in my case it is portable and I have it in Downloads/Vectr
.
We have already seen the exact dependencies, we are going to download them manually (choose your architecture and download the .deb):
As we saw earlier, my architecture is amd64, however, the system also installs the i386 version of the libraries. Since this procedure is manual, and portable, I decided to use only amd64, and it worked for me. But in case of any errors, try using the two architectures together.
Open the .deb with Archive Manager, and open data.tar.xz
file, then go to /./usr/lib/x86_64-linux-gnu/
and extract those two files in the root folder of the software (Downloads/Vectr
). Repeat for each downloaded .deb file.
You may also use the ar from the apit package binutils command to extract the deb file:
# Set $lib_name and $deb_file_path according to your arch, such as:
lib_name="libpangocairo-1.0"
deb_file_path="libpango-1.0-0_1.44.7-2ubuntu4_amd64.deb"
cd /home/myuser/DownloadsVects
mkdir $lib_name
cd $lib_name
ar x ~/Downloads/$deb_file_path
tar xf data.tar.xz
cp ls usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 ..
# Also repeat for each file
After that the software should run normally. And if you run:
:~/Downloads/Vectr$ ldd vectr | grep pango
libpangocairo-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangocairo-1.0.so.0 (0x00007fc6b0ac8000)
libpango-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpango-1.0.so.0 (0x00007fc6b0931000)
libpangoft2-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangoft2-1.0.so.0 (0x00007fc6af084000)
You will see how the address of the dependencies changed from /usr/lib/x86_64-linux-gnu/
to /home/myuser/Downloads/Vectr/
.
Second solution
Downgrade these libraries (remember, this method can cause malfunction in other softwares).
Variant one: (I could not try this one)
Install an old version from the repositories that you have in your sources.
List the available versions of the libraries:
:~$ apt-cache madison libpango-1.0-0
libpango-1.0-0 | 1.44.7-2ubuntu4 | http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
In my case I only have the current version, and it is the one that is causing the conflict. If you get other versions, you can downgrade with the following command:
:~$ sudo apt install pkg-name=old-version
Remember that there are two more libraries that must be installed (libpangocairo-1.0-0 and libpangoft2-1.0-0). I do not know if these are automatically installed as dependencies, this doubt is also valid for versions for i386.
Variant two: (I did try this one)
For those who do not have previous versions, you must download it (.deb) as indicated in the First Solution. And to avoid major errors, the versions for i386 must be downloaded too (remember that in this example we have Ubuntu amd64).
After downloading the files, open a terminal in the folder where you saved them, then you can downgrade with the following command:
:~$ sudo dpkg -i libpango*.deb
This may end with errors, but in the end the software runs fine, and apparently everything works fine. The future consequences I do not know yet.
To undo this downgrade run sudo apt update
, then sudo apt upgrade
and you will surely need a sudo apt --fix-broken install
.
Then if you want to make the change permanent, and avoid accidental updates of these libraries, you can use the command:
:~$ sudo apt-mark hold package-name
This prevents the libraries from automatically installed, updated, upgraded, or removed during system upgrade. And you can undo it with the command:
:~$ sudo apt-mark unhold package-name