Я разработал приложение, используя QT (5.11.2) и QtCreator.
Когда я компилирую и запускаю приложение напрямую из QtCreator, все отлично работает как в отладочной, так и в выпускной сборке.
Я также могу запустить приложение из консоли, если оно собирается с помощью кнопки «build» QtCreator.
Однако, если я попытаюсь собрать его из консоли, произойдет сбой ... Я попытался скомпилировать его в режиме отладки, чтобы посмотреть, не выдает ли оно исключение, но у меня очень мало опыта отладки прямо в Linuxракушка.
Для создания приложения использовались следующие команды:
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.
Я не понимаю сообщение об ошибке.
Некоторые вещи, которые я заметил:
- Приложение компилируется
- Приложение начинает работать.Первая пара строк выполняется
- Насколько я знаю, я не трогал какие-либо настройки сборки в QtCreator
- приложение не падает, когда появляется предупреждение
libpng warning: iCCP: known incorrect sRGB profile
...так что я думаю, это не связано с этим.
Мой главный вопрос:
- Почему возможно, что приложение работает нормально при компиляции из QtCreator, но происходит сбой при компиляции через терминал?
- Существуют ли какие-либо параметры сборки, которые по умолчанию установлены в qmake, когда что-то компилируется из QtCreator?
- Как мне поступить с этой ошибкой?Я не знаю, какими должны быть следующие шаги, поскольку все работает нормально, когда я использую IDE, такую как QtCreator.
РЕДАКТИРОВАТЬ:
Я прочитал предложенный вопрос и справочную страницу 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/?
в папку, где находится мой сценарий оболочкии мой исполняемый файл находится.
К сожалению, все эти шаги не решили мою проблему ... поэтому я либо сделал что-то не так, либо это не проблема.