我已经使用QT(5.11.2)和QtCreator开发了一个应用程序。
当我直接从QtCreator编译并运行应用程序时,无论是调试还是发布版本,一切都可以正常工作。
如果使用QtCreator的“ build”按钮进行构建,我也可以从控制台启动该应用程序。
但是,如果我尝试从控制台构建它,则会崩溃...我试图在调试模式下对其进行编译,以查看它是否引发任何异常,但是我在Linux shell中进行调试的经验很少。
以下命令用于构建应用程序:
qmake CONFIG+=debug myProject.pro
make
gdb myProject
(gdb) run
这是输出:
Starting program: /home/.../myProject
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffedc48700 (LWP 30355)]
[New Thread 0x7fffe2c70700 (LWP 30356)]
[New Thread 0x7fffe246f700 (LWP 30357)]
[New Thread 0x7fffe09d7700 (LWP 30359)]
libpng warning: iCCP: known incorrect sRGB profile
terminate called without an active exception
Thread 1 "myProject" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
我不明白该错误信息。
我注意到的一些事情:
libpng warning: iCCP: known incorrect sRGB profile
时,应用程序不会崩溃……因此,我认为它与此无关。 我的主要问题是:
编辑:
我已经阅读了建议的问题和Qt for Linux/X11 - Deployment
帮助页面。
我尝试使用如下所示的bash文件运行该应用程序:
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
echo appname = $appname
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
echo dirname = $dirname
LD_LIBRARY_PATH=$dirname
echo LD_LIBRARY_PATH = $LD_LIBRARY_PATH
echo " "
export LD_LIBRARY_PATH
$dirname/$appname "$@"
,其命名与我的应用程序完全一样,扩展名为.sh
(myProject.sh
)。
此外,我还运行了ldd ./myProject
命令,其中列出了以下动态库:
linux-vdso.so.1 (0x00007fff6edaf000)
libQt5Charts.so.5 => /home/***/Qt/5.11.2/gcc_64/lib/libQt5Charts.so.5 (0x00007ff61912f000)
libQt5Widgets.so.5 => /home/***/Qt/5.11.2/gcc_64/lib/libQt5Widgets.so.5 (0x00007ff6188eb000)
libQt5Gui.so.5 => /home/***/Qt/5.11.2/gcc_64/lib/libQt5Gui.so.5 (0x00007ff6180ee000)
libQt5Core.so.5 => /home/***/Qt/5.11.2/gcc_64/lib/libQt5Core.so.5 (0x00007ff617994000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff61760b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff61726d000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007ff61703e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff616e26000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff616a35000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff619b70000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff616816000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007ff61658a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff61636d000)
libicui18n.so.56 => /home/***/Qt/5.11.2/gcc_64/lib/libicui18n.so.56 (0x00007ff615ed4000)
libicuuc.so.56 => /home/***/Qt/5.11.2/gcc_64/lib/libicuuc.so.56 (0x00007ff615b1c000)
libicudata.so.56 => /home/***/Qt/5.11.2/gcc_64/lib/libicudata.so.56 (0x00007ff614139000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff613f35000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007ff613d33000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007ff613a1d000)
libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007ff6137ec000)
libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007ff613536000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff6132c4000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007ff612f8c000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007ff612d64000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007ff612b60000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007ff61295a000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007ff612745000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff61253d000)
我现在已将所有列出的七个库从/home/***/Qt/5.11.2/?
复制到我的Shell脚本和可执行文件所在的文件夹中。
不幸的是,所有这些步骤都不能解决我的问题...因此,我做错了什么,或者这不是问题。