приложение, скомпилированное с помощью qmake, не запускается, если скомпилировано из консоли, но запускается, если скомпилировано из QtCreator - PullRequest
0 голосов
/ 18 февраля 2019

Я разработал приложение, используя 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/? в папку, где находится мой сценарий оболочкии мой исполняемый файл находится.

К сожалению, все эти шаги не решили мою проблему ... поэтому я либо сделал что-то не так, либо это не проблема.

...