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

问题描述 投票:8回答:4

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

Package
|
----bin
    |
    -----application
    -----application.sh
    -----Qt
         |
         -----necessary qt libraries
         -----platforms

这是application.sh文件 -

#!/bin/sh
export LD_LIBRARY_PATH=`pwd`/Qt
./application

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

enter image description here请检查标记的部分。任何人都可以解释为什么即使在导出Qt后找不到LD_LIBARRY_PATH文件夹中的库?

编辑:

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

请检查标记的部分。

enter image description here

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

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

enter image description here

qt ubuntu shared-libraries
4个回答
4
投票

如果你看看ls -al的输出

ls -al output

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


6
投票

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


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"

在脚本的顶部(假设bash shell,来自here

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

第二

也许你应该考虑导出你的新LD_LIBRARY_PATH,就像这样(来自qazxsw poi):

here

第三

在更改变量(来自LD_LIBRARY_PATH=whatever export LD_LIBRARY_PATH )后,为ld运行ldconfig命令可能很有用:

here

1
投票

根据显示的屏幕截图,文件sudo ldconfig 不存在于libQt5MultimediaWidgets.so中。

© www.soinside.com 2019 - 2024. All rights reserved.