代码之家  ›  专栏  ›  技术社区  ›  zaratustra

加载共享库时出现Linux错误:无法打开共享对象文件:没有此类文件或目录

  •  271
  • zaratustra  · 技术社区  · 16 年前

    该程序是Xenomai测试套件的一部分,从Linux PC交叉编译到Linux+Xenomai ARM工具链中。

    # echo $LD_LIBRARY_PATH                                                                                                                                          
    /lib                                                                                                                                                             
    # ls /lib                                                                                                                                                        
    ld-2.3.3.so         libdl-2.3.3.so      libpthread-0.10.so                                                                                                       
    ld-linux.so.2       libdl.so.2          libpthread.so.0                                                                                                          
    libc-2.3.3.so       libgcc_s.so         libpthread_rt.so                                                                                                         
    libc.so.6           libgcc_s.so.1       libstdc++.so.6                                                                                                           
    libcrypt-2.3.3.so   libm-2.3.3.so       libstdc++.so.6.0.9                                                                                                       
    libcrypt.so.1       libm.so.6                                                                                                                                    
    # ./clocktest                                                                                                                                                    
    ./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory                                 
    

    好的,我没有注意到文件末尾的.1是文件名的一部分。这到底是什么意思?

    17 回复  |  直到 16 年前
        1
  •  413
  •   Hakim    4 年前

    您的库是一个动态库。 您需要告诉操作系统在运行时可以在哪里找到它。

    为此,,

    (1)如果您不知道库的位置,请查找库的位置。

    sudo find / -name the_name_of_the_file.so
    

    (2) 检查是否存在动态库路径环境变量( LD_LIBRARY_PATH

    $ echo $LD_LIBRARY_PATH
    

    如果没有要显示的内容,请添加默认路径值(如果愿意,也可以不显示)

    $ LD_LIBRARY_PATH=/usr/local/lib
    

    (3) 我们添加渴望的路径,导出它并尝试应用程序。

    请注意,路径应该是 path.so.something /my_library/path.so.something 应该是:

    $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
    $ export LD_LIBRARY_PATH
    $ ./my_app
    

    https://www.gnu.org/software/gsl/doc/html/usage.html#shared-libraries

        2
  •  193
  •   Community CDub    8 年前

    以下是一些您可以尝试的解决方案:

    正如AbiusX指出的:如果您刚刚安装了库,那么您可能只需要运行 ldconfig .

    sudo ldconfig
    

    ldconfig创建指向最新版本的必要链接和缓存 在命令中指定的目录中找到共享库 (/lib和/usr/lib)。

    通常,当您安装一个新库时,您的包管理器会处理这个问题,但并不总是这样,即使这不是您的问题,运行ldconfig也不会有什么坏处。

    开发包或错误的版本

    如果不行,我也会退房 Paul's suggestion

    apt-cache search <libraryname>
    

    如果只是安装了错误版本的库,这也会有所帮助。有些库同时以不同的版本发布,例如Python。

    图书馆位置

    如果您确定安装了正确的软件包,而ldconfig没有找到它,那么它可能只是在一个非标准目录中。默认情况下,ldconfig在 /lib /usr/lib ,以及中列出的目录 /etc/ld.so.conf $LD_LIBRARY_PATH . 如果您的库在其他地方,您可以在 /etc/ld.so.conf ,或将库移动到 /usr/lib ldconfig

    要查找库的位置,请尝试以下操作:

    sudo find / -iname *libraryname*.so*
    

    (替换 libraryname (使用您的库的名称)

    如果你去 路线,你会想把它放进你的 ~/.bashrc 文件,以便在每次登录时运行:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
    
        3
  •  148
  •   MC Emperor    7 年前

    使现代化


    libpthread_rt.so.1 在该清单中。您可能需要重新配置和重新构建它,以便它取决于您拥有的库,或者安装提供的任何东西 libpthread\u rt.so.1 .

    通常,.so后面的数字是版本号,您经常会发现它们是相互的符号链接,因此如果您有libfoo.so的1.1版,那么您将有一个真正的文件libfoo.so.1.0,并且符号链接foo.so和foo.so.1指向libfoo.so.1.0。如果安装版本1.1而不删除另一个版本,则将有一个libfoo.so.1.1,libfoo.so.1和libfoo.so现在将指向新版本,但任何需要该确切版本的代码都可以使用libfoo.so.1.0文件。只依赖版本1 API但不关心它是1.0还是1.1的代码将指定libfoo.so.1。像 orip 评论中指出,这一点在 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html .

    摆脱符号链接 libpthread\u rt.so.1 libpthread_rt.so . 不过,不能保证它不会破坏你的密码,吃你的电视晚餐。

        4
  •  34
  •   Julia    4 年前

    编译.c文件时链接:

    gcc -I/usr/local/include xxx.c -o xxx -L/usr/local/lib -Wl,-R/usr/local/lib
    

    -Wl,-R 部分告诉生成的二进制文件也查找库 /usr/local/lib /usr/lib/ .

        5
  •  27
  •   Luce    5 年前

    尝试添加 LD_LIBRARY_PATH ~/.bashrc

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_your_library
    

    它起作用了!

        6
  •  13
  •   Florian Ledermann    14 年前

    为此,请参见 Sun Linker and Libraries Guide

    此外,请注意,“外部版本控制”在Linux上基本上已经过时,因为符号版本控制(GNU扩展)允许在单个库中存在同一函数的多个不兼容版本。此扩展允许glibc具有相同的外部版本: libc.so.6

        7
  •  7
  •   Community CDub    7 年前
    cd /home/<user_name>/
    sudo vi .bash_profile
    

    在末尾添加这些行

    LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
    export LD_LIBRARY_PATH
    
        8
  •  6
  •   Anand Paul    7 年前

    我也有一个类似的错误,在~/.bashrc中提供LD_LIBRARY_路径并没有修复。 去苏安机场。

    gedit /etc/ld.so.conf.d/myapp.conf
    

    必须运行以下命令才能激活路径:

    ldconfig
    

    ldconfig -v | less
    

    如果这显示了您的库文件,那么您就可以开始了。

        9
  •  4
  •   ALM865    9 年前

    ln -s /lib/libpthread_rt.so /lib/libpthread_rt.so.1
    

    然后 ls -l /lib 现在应该显示符号链接及其指向的内容。

        10
  •  4
  •   zx485 potemkin    6 年前


    要解决此问题,请执行以下操作:

    1. 在Eclipse中:

    2. 设定路径

      LD_LIBRARY_PATH=/my_lib_directory_path
      
        11
  •  2
  •   jonny    10 年前

    sudo apt-get install libfontconfig1
    

    /usr/lib/x86_64-linux-gnu 它工作得很好。

        12
  •  2
  •   Rubens Gomes    9 年前

    如果在Microsoft Windows上运行应用程序,则需要在path环境变量中定义动态库(.dll)的路径。

        13
  •  2
  •   Victor    3 年前

    尝试安装

    sudo apt-get install lib32z1

        14
  •  1
  •   Stypox    6 年前

    发生此错误的原因是系统无法引用所述的库文件。采取以下步骤:

    1. locate libpthread_rt.so.1 将列出具有该名称的所有文件的路径。让我们假设一条路径是 /home/user/loc .
    2. cd home/USERNAME . 将USERNAME替换为要使用其运行文件的当前活动用户的名称。
    3. vi .bash_profile LD_LIBRARY_PATH 参数,就在前面 . ,添加行 /lib://home/usr/loc:.
    4. 关闭终端并重新启动应用程序。它应该运行。
        15
  •  1
  •   prabhugs    5 年前

    我使用Ubuntu 18.04

    sudo apt install libgconf2-dev
    

    turtl: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory
    
        16
  •  1
  •   robertspierre    3 年前

    ldconfig 然后是路径。

    sudo ldconfig /opt/intel/oneapi/mkl/2021.2.0/lib/intel64

        17
  •  0
  •   Mohamad Osama    7 年前

    我犯了这个错误,我想这和你的原因是一样的

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

    试试这个。 关于文件:

    cd /opt/Popcorn (or wherever it is) 
    chmod -R 555 * (755 if not ok) 
    chown -R root:root *
    

    sudo su获取文件系统的权限。

        18
  •  0
  •   Vega Stipe    6 年前

    我犯了这个错误,我想这和你的原因是一样的

    加载共享库时出错:libnw.so:无法打开共享库 对象文件:没有这样的文件或目录

    试试这个。修复对文件的权限:

    cd /opt/Popcorn (or wherever it is) 
    chmod -R 555 * (755 if not ok) 
    
        19
  •  0
  •   MohamedAmin Samet    5 年前

    https://bugzilla.redhat.com/show_bug.cgi?id=1456202 我试过上面提到的解决方案,它确实有效。

    前面问题中的解决方案可能有效。但我认为这是一个简单的解决方法。 libwbclient 戴软呢帽:

    dnf reinstall libwbclient