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应用程序的名字
会出现该应用程序加载的各类动态库的基本状态,图示:
这个里面我这只有这个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的熟悉程度慢慢加深中...