Qt项目在Qt Creator下编译运行正常,可是直接执行应用程序,内建的动态库找不到

Ubuntu下Qt5.4.1项目,在Qt Creator下能正常编译和运行, shell

可是准备打包发布的时候,双击无反应, ./执行出现以下错误, app


error while loading shared libraries: libxxx.so.1 spa

:cannot open shared object file debug

: No such file or directory code

按照提示,是说加载共享库libxxx.so.1的时候出现异常,lixxx是我在Qt里内建的共享库, 编译

查看debug/release目录,都有对应的文件生成,为何仍是找不到,奇了怪了。 class


首先,查看应用程序执行的时候,到底加载了哪些动态库,缺失了哪些动态库 变量

ldd appName #appName=你的Qt应用程序的名字

会出现该应用程序加载的各种动态库的基本状态,图示: 打包

这个里面我这只有这个not found,可能你那会有更多, object

好了,问题稍微明了了一点,

那么接下来的要作的,就是怎么让not found变成能找到

首先,补充一点,Qt默认检索的动态库路径是/usr/lib和/lib,在上图中基本能够看到点痕迹,


第一种解决办法

那么把如今debug/relese里生成的动态库,拷贝到上面的/usr/lib下,

而后从新执行ldd查看,或者直接启动应用程序便可,


上面的方法勉强算解决了当前的问题了,可是立刻涉及到的问题是:

Qt子项类库比较多的时候,发布出去的时候,去上面的方式明显不合理,

因而乎,就有了更理想那么一丢丢的办法:

每一个子库的.pro文件添加DESTDIR = bin,这里的bin随便定义,

保证全部的动态库生成后都在同一个目录下便可,手动拖也行。

而后把整个bin路径里全部动态库,拷贝到/usr/lib目录下便可。


第二种方式:添加临时动态库环境变量

export LD_LIBRARY_PATH = ~/bin
#这里的~/bin是你的动态库所在目录

#查看当前动态库环境变量
echo $LD_LIBRARY_PATH
#有输出,说明是正常的
而后发现,

1.鼠标双击仍是点不开应用程序;

2.可是经过./命令能够打开应用程序;

3.系统注销或重启后,失效

设置shell脚本,并添加到启动项,能够解决3的问题,

可是只能经过Terminal执行,不理想


第三种方式:永久性修改系统环境变量

这里由于不适用程序要求,就很少说,


体悟一丢丢:

几种方式对我个Qt小咋咋来讲,都比较不实用,没找到理想的解决办法,

可是其中对Qt编译项的理解和应用,

以及对Ubuntu的熟悉程度慢慢加深中...

相关文章
相关标签/搜索