为什么更改LD_LIBRARY_PATH对Ubuntu没有影响?

Ras*_*rov 8 ubuntu qt shared-libraries

我试图部署我的应用程序Ubuntu 16.04.所以我制作了一个包含以下层次结构的包 -

Package
|
----bin
    |
    -----application
    -----application.sh
    -----Qt
         |
         -----necessary qt libraries
         -----platforms
Run Code Online (Sandbox Code Playgroud)

这是application.sh文件 -

#!/bin/sh
export LD_LIBRARY_PATH=`pwd`/Qt
./application
Run Code Online (Sandbox Code Playgroud)

当我执行该application.sh文件时,它显示我无法找到该libQt5MultimediaWidgets.so.5文件.但它在Qt文件夹中.此外,当我在导出后ldd applicationapplication.sh文件打印LD_LIBRARY_PATH它给我以下输出 -

在此输入图像描述 请检查标记的部分.任何人都可以解释为什么Qt即使在导出后仍未找到该文件夹中的库LD_LIBARRY_PATH

编辑:

所以正如@Zang建议的那样,我检查了调试日志,这里是 -

请检查标记的部分.

在此输入图像描述

看起来它实际上正在尝试实际libQt5MultimediaWidgets.so,然后报告它无法找到它.有谁能帮我理解这里发生的事情?

编辑-2:根据@Tarun的建议,我已经ls -al在我的Qt文件夹上运行了.这是输出 -

在此输入图像描述

小智 6

您的Qt目录中的所有文件实际上是同一目录中不存在的文件的simlink,因此无法找到它们.


Len*_*and 5

第一

可能是pwd不在你认为的地方吗?

你可以尝试添加

# Figure out where the application.sh script is located
scriptpath="$( cd "$(dirname "$0")" ; pwd -P )"
# Make sure our pwd is that location
cd  "$scriptpath"
Run Code Online (Sandbox Code Playgroud)

在脚本的顶部(假设bash shell,从这里)

通过这样做,Qt文件夹的所有相对路径都是有效的.

第二

也许你应该考虑导出你的新LD_LIBRARY_PATH,就像这样(从这里):

LD_LIBRARY_PATH=whatever
export LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

第三

在更改变量(从此处)后,为ld运行ldconfig命令以进行更新可能很有用:

sudo ldconfig
Run Code Online (Sandbox Code Playgroud)


Tar*_*ani 5

如果你看看你的输出 ls -al

ls -al 输出

这些是您拥有的软链接。您的软链接libQt5MultimediaWidgets.so.5指向libQt5MultimediaWidgets.so.5.9.2同一目录,而该文件根本不存在。因此,您需要设置正确的软链接路径或将文件放在同一目录中