自己的lib,另一台计算机:无法打开共享对象文件:没有这样的文件或目录

Posted

技术标签:

【中文标题】自己的lib,另一台计算机:无法打开共享对象文件:没有这样的文件或目录【英文标题】:Own lib, another computer: cannot open shared object file: No such file or directory 【发布时间】:2015-05-28 13:51:03 【问题描述】:

今天我的测试继续进行,但我总是得到:“无法打开共享对象文件”。所以我做了一个小程序,包括最重要的东西:

垃圾箱:测试;库:TestLib

库:

h:

 class TestLib
  public:
   TestLib();
   void DoSome();
 ;

cpp:

 #include "testlib.h"
 #include <iostream>

 TestLib::TestLib()
 

 void TestLib::DoSome()
  std::cout << "Hallo Test_Lib!" << std::endl; std::cout.flush();
 

垃圾箱:

QT 创建者配置文件:

    HOME = $$system(echo $HOME)
    TEMPLATE = app
    CONFIG += console
    CONFIG -= app_bundle
    CONFIG -= qt

    SOURCES += main.cpp

    LIBS += -L$$HOME/Test_Lib/Libs/ -Wl,-rpath=$$HOME/Test_Lib/Libs/ -lTestLib -ldl -lpthread -lrt

    INCLUDEPATH += $$HOME/Test_Lib/Includes/
    DEPENDPATH += $$HOME/Test_Lib/Includes/

和 main():

    #include "testlib.h"

    int main()
        TestLib nLib;
        nLib.DoSome();
        return 0;
    

每台电脑上的文件都在

   /home/USERNAME/Test_Lib
   /home/USERNAME/Test_Lib/Includes/
   /home/USERNAME/Test_Lib/Libs/

在开发计算机上我可以运行 ./Test 并且输出是“Hallo Test_Lib!”。

但在我的另一台计算机上,我收到错误“无法打开共享对象文件:libTestLib:没有这样的文件或目录”。

两台电脑都安装了 Linux Mint-17-64-KDE...

如何让它工作?

问候早起

【问题讨论】:

【参考方案1】:

您的 Lib 似乎是一个共享对象。您有 2 个解决方案:

您可以使用静态库(.a 文件),这样在运行时就不需要共享对象(它将直接嵌入到您的可执行文件中) 您还可以在二进制文件中提供 LibTestLib 文件(就像在 Windows 上为 DLL 所做的那样)。

【讨论】:

让静态链接有意义?我不知道程序在哪台计算机上运行...您的意思是将 lib 放入与 bin 相同的目录中?同时我发现了一些东西:终端-> export LB_LIBRARY_PATH = /Path/To/Lib Terminal -> sudo ldconfig 现在./Test 在另一台计算机上也得到输出“Hallo Test_Lib!”。但是如何在 bin (./Test) 中使用该解决方案? 抱歉废话..;修复它对于您的 Lib 路径,您可以将您的 lib 文件放在标准的 Lib 位置(如果我没记错的话是 /usr/local/lib) 但我想将我的库放在一个自己的文件夹中,就像标题一样。例如:/home/USERNAME/A_Prog/、/.../Libs/、/.../Includes/a.s.o.我不明白的是,我的链接获得了 HOME-dir 和 libs 的路径。但是在该路径中找不到库!为什么?我为什么还要使用 -wl -rpath?

以上是关于自己的lib,另一台计算机:无法打开共享对象文件:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

局域网之间无法访问,没有权限

怎么访问共享文件夹

从一台主机到另一台主机的共享库路径不一致

如何共享文件夹给另一台电脑

如何找到共享的文件夹

win10网络共享看不到自己