【问题标题】:How to link properly shared linux libraries in qt?如何在 qt 中正确链接共享的 linux 库?
【发布时间】:2017-01-23 18:45:30
【问题描述】:

我想在没有安装任何库的不同计算机上运行我的程序。我使用 openCV 在 QT 中构建我的程序,并将所有需要的 .so 库复制到包含我所有文件的文件夹中。接下来我将 QT .pro 中的路径更改为

INCLUDEPATH += ../

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

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

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

【问题讨论】:

  • 您确保实际运送图书馆的所有部分吗?显然它找不到 opencv_highgui SO。可能其他 opencv 库需要 opencv_highgui 库(readelf 在您的 .elf 上运行时可能不会报告它),或者它正在寻找没有主要/次要版本的 libopencv_xyz.so 库文件名(“长名称”通常用于 /usr/lib 中的符号链接)。 readelf 工具在输出文件上的输出是什么?
  • readelf 文件的整个输出我添加到带有项目文件 libopencv_highgui.so.3.1 libopencv_imgcodecs.so.3.1 [libopencv_imgcodecs.so.3.1 libopencv_core.so.3.1 ...的文件夹中
  • 如果您指定系统规格和版本可能会有所帮助。

标签: qt opencv dynamic compilation


【解决方案1】:

将LD_LIBRARY_PATH 环境变量设置为您运行它的目录。

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

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

【讨论】:

    【解决方案2】:

    您还可以在/etc/ld.so.conf.d 中添加一个文件<whatever>.conf,并在一行或多行中添加库的路径名。

    然后运行ldconfig。这只需要一次。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多