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

can_not_open_shared_object_fileNo_such_file_or_directory

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

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

error while loading shared libraries: libxxx.so.1

:cannot open shared object file

: No such file or directory

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

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

 

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

 

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

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

Qt项目在Qt Creator下编译运行正常,但是直接执行应用程序,内建的动态库找不到_第1张图片

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

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

那么接下来的要做的,就是怎么让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的熟悉程度慢慢加深中...

你可能感兴趣的:(Qt项目在Qt Creator下编译运行正常,但是直接执行应用程序,内建的动态库找不到)