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

时间:2015-05-28 13:51:03

标签: c++ linux shared-libraries

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

垃圾箱:测试; lib:TestLib

lib:

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 creator pro.file:

    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 ......

我如何让它运作?

问候Earlybite

1 个答案:

答案 0 :(得分:0)

看来你的Lib是一个共享对象。你有两个解决方案:

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