错误:libgtk-3.so.0未安装,尽管它位于/usr/lib/x86_64-linux-gnu目录下。

我正在尝试安装一个带有GTK的CAN 仿真器软件,但是一直出现错误。

CANMate: 加载共享库时出错:libgtk-3.so.0:无法打开共享对象文件:没有那个文件或目录

但是当apt显示libgtk-3已安装:

$ sudo apt install libgtk-3-0 libgtk-3-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libgtk-3-0 is already the newest version (3.22.30-1ubuntu1).
libgtk-3-dev is already the newest version (3.22.30-1ubuntu1).

共享库可以在/usr/lib/x86_64-linux-gnu中找到。
$ ls | grep libgtk-3
libgtk-3-0
libgtk-3.so
libgtk-3.so.0
libgtk-3.so.0.2200.30

我觉得安装文件 CANMatev1.3.deb 在安装过程中无法找到共享的 lib 文件。
请问,你能帮我解决这个错误吗?

尝试使用sudo ldconfig重新创建您的动态链接库缓存的链表。只有缓存会被搜索,而不是目录列表。 - guiverc
@guiverc 我尝试了sudo ldconfig和重新安装sudo dpkg -i <deb.name>。但是在安装后,当我尝试调用程序时,仍然显示libgtk-3.so.0: cannot open shared object file - clamentjohn
虽然软件包信息(通过dpkg -i)显示架构为“all”,但实际的CANMate应用程序似乎是一个32位二进制文件 - 因此您可能需要启用多架构并安装libgtk-3-0:i386软件包。 - steeldriver
@steeldriver谢谢你!这个方法有效。你是怎么知道它是x32架构的?我想知道,这样下次遇到类似的情况时我可以自己检查一下。 - clamentjohn
@clmno 请看下面 - steeldriver
1个回答

凭直觉,我们来看看问题是否是应用程序是32位的。
  • 解压deb文件到本地目录

    $ mkdir ./tmproot
    $ dpkg -x CANMAte_V1.3_Linux/deb/CANMatev1.3.deb ./tmproot
    
  • 检查应用程序二进制文件

    $ file ./tmproot/usr/bin/CANMate 
    ./tmproot/usr/bin/CANMate: ELF 32位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接,解释器 /lib/ld-linux.so.2,适用于 GNU/Linux 2.6.24,BuildID[sha1]=061c53b0a1b07aca998506681c2a93039181979e,未剥离
    
所以,由于您使用的是64位操作系统,您需要启用多架构并安装所需库的32位版本。
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libgtk-3-0:i386

另请参阅如何在Ubuntu 64位系统中运行32位应用程序?