自己的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,另一台计算机:无法打开共享对象文件:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章