2017-01-23 76 views
0

我想在不具有任何已安装库的计算机上运行我的程序。我使用openCV在QT中构建​​我的程序,并将所有需要的.so库复制到我的所有文件的文件夹中。在QT接下来我改变路径的.pro到如何在qt中正确链接共享的linux库?

INCLUDEPATH += ../

LIBS += -L../ -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core.

我编我的电脑(Linux版)上,它的工作,但我希望它到另一台计算机上工作,而无需编译。在我朋友的电脑上,二进制文件不起作用。我得到错误:

./displayImage: error while loading shared libraries: libopencv_highgui.so.3.1: cannot open shared object file: No such file or directory

+0

您是否确定实际运送图书馆的所有部分?显然它找不到opencv_highgui SO。也许opencv_highgui库是其他opencv库所必需的(** readelf **可能不会在您的.elf上运行时报告它),或者它正在寻找libopencv_xyz.so库,而它们的文件名中没有主要/次要版本( “长名称”通常用于/ usr/lib中的符号链接)。 输出文件上的** readelf **工具的输出是什么? –

+0

的readelf文件全输出I添加到文件夹项目文件libopencv_highgui.so.3.1 libopencv_imgcodecs.so.3.1 [libopencv_imgcodecs.so.3.1 libopencv_core.so.3.1 ... –

+0

如果您指定的系统可能有帮助规格和版本。 – ilke444

回答

2

设置LD_LIBRARY_PATH环境变量,你运行它的目录。

如果您的文件位于/home/abc/cool/program/displayImage(和文件夹包含所有程序需要运行.so文件)

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/abc/cool/program/ 
$ ./displayImage 
1

您还可以在/etc/ld.so.conf.d添加文件<whatever>.conf,把一个或多个行用你的库的路径名。然后运行ldconfig。这只需要一次。