17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
1

Перенос Qt приложения на другой компьютер (linux)

10.07.2017, 20:18. Показов 9000. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Cоздал небольшое приложение на Qt 5.8.0, из используемого QtCore, QtNetwork и QtSql. Сборка qt установлена не static. На моём компе всё работает.
Делаю следующее: собираю Release приложение, в папку с исполняемым помещаю libQt5Core.so.5.8.0, libQt5Network.so.5.8.0, libQt5Sql.so.5.8.0, папку sqldrivers из плагинов, оттуда же папку platforms. На целевой машине вылетает сегфолт ("Segmentation fault (core dumped)"). Прошу подсказать что я делаю не так и то мне нужно делать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2017, 20:18
Ответы с готовыми решениями:

Перенос приложения на другой компьютер
Закинул в папку с exe libmysql.dll, на моем компе работает, запускаю на другом и libmysql.dll...

Qt5 Перенос приложения на другой компьютер
Установил я QtCreator + Qt5 + MinGW. Все зашибись работает. Что бы иметь возможность запускать...

Перенос приложения на другой ПК с ОС Linux
Появилась проблема с переносом приложения на другой ПК с ОС Linux. У себя на компьютере я...

Перенос приложения с БД на другой компьютер
Здравствуйте. У меня есть прога на винформах которая берет данные с БД(добавляет,удаляе и тд.). Эту...

10
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2017, 20:45 2
Цитата Сообщение от Andrewer Посмотреть сообщение
На целевой машине вылетает сегфолт ("Segmentation fault (core dumped)").
Может все же ошибки в коде ?

По поводу переноса:

Цитата Сообщение от Andrewer Посмотреть сообщение
в папку с исполняемым помещаю libQt5Core.so.5.8.0, libQt5Network.so.5.8.0, libQt5Sql.so.5.8.0, папку sqldrivers из плагинов, оттуда же папку platforms.
Этого недостаточно, нужно создать симлинки и запускать через программу через шел скрипт что бы "натравить" на папку программы.

Bash
1
2
3
export QT_PLUGIN_PATH=./plugins  # или . 
export LD_LIBRARY_PATH=./lib                  # или .
./<Имя исполняемого файла программы>
Можете попробовать это сделать с помощью: LibraryCollector- программа для сборки библиотек для переноса Qt-приложений

А вообще под линукс принято ставить пакеты, а не таскать "либы".
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
10.07.2017, 20:54  [ТС] 3
Ошибки в коде маловероятны, на компе с которого ведётся разработка никак проблем не возникает.
Вашу программу я смотрел, но она как-то странно себя ведёт. Я указываю все поля (в name путь к проге, в lib - /Path/to/Qt/5.8/gcc_64/lib, в plugins /Path/to/Qt/5.8/plugins, to выбираю конечную папку), нажимаю Run, Update, Copy. в окне отображается пункты QtLibs, QtPlugins и QtQml помеченные галочкой, пункты /usr/lib, /lib и Other - не помеченые. В целевую папку копируется только исполняемый файл. Пробовал от рута - результат тот же.

Цитата Сообщение от Avazart Посмотреть сообщение
Этого недостаточно, нужно создать симлинки и запускать через программу через шел скрипт что бы "натравить" на папку программы.
Пожалуйста, скажите подробнее, что за шел, какие симлинки создавать и как "натравливать".


Цитата Сообщение от Avazart Посмотреть сообщение
А вообще под линукс принято ставить пакеты, а не таскать "либы".
Да это серверная прога, я хочу её установить куда надо и забыть, а с пакетами разбираться не хочу (мне это представляется очень долгим и сложным)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2017, 21:02 4
Цитата Сообщение от Andrewer Посмотреть сообщение
Пожалуйста, скажите подробнее, что за шел,
Я привел выше.
Цитата Сообщение от Andrewer Посмотреть сообщение
какие симлинки создавать
Симлинки библиотек Qt.

Цитата Сообщение от Andrewer Посмотреть сообщение
В целевую папку копируется только исполняемый файл. Пробовал от рута - результат тот же.
Ну не знаю под линукс я особо не тестировал тут ничем не могу помочь, возможно нужно поковырять код и довести до работоспособности под вашу систему, я же проверял только под Debian x32.

Программа должна копировать исполняемый файл и либы из QtLibs, QtPlugins и QtQml вместе с ихними симлинками.
Цитата Сообщение от Andrewer Посмотреть сообщение
/usr/lib, /lib и Other - не помеченые.
Нужно смотреть из этого необходимо и выбирать "руками" перед копированием, тут только экспериментальным путем.
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
10.07.2017, 22:08  [ТС] 5
Ситуация становится просто невероятно интересной! На моём компе, решил пробить программу командой "ldd". Она выдала нужный список библиотек. Сделал тоже самое на сервере, и она мне выдала что программа слинкована статически!!! С передачей всё нормально, другие библотеки кидал на сервер, так же чекал ldd, отображается список (кстати я таким образом выяснил что нужно ещё копировать загадочные "libcui*"). Ещё скопировал (просто файловым менеджером перенёс по ftp) все симлинки под нужные .so, в итоге вылетает сегфолт, но уже без "core dumped".
Наверное, придётся делать статическую сборку Qt, и собирать программу ей.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2017, 22:17 6
Цитата Сообщение от Andrewer Посмотреть сообщение
решил пробить программу командой "ldd".
Можете не пробовать - она не видит плагинов.

Добавлено через 50 секунд
Цитата Сообщение от Andrewer Посмотреть сообщение
Наверное, придётся делать статическую сборку Qt, и собирать программу ей.
Ставьте пакет Qt из реп и не морочьте ...
А программу из исходников собирайте прямо на сервере.
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
10.07.2017, 22:28  [ТС] 7
Цитата Сообщение от Avazart Посмотреть сообщение
А программу из исходников собирайте прямо на сервере.
Это в самом-самом крайнем случае. Прежде, ещё немного по-долблюсь головой об стену
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2017, 22:39 8
В крайнем случае- это извращаться как вы извращаетесь.

Я думал вы с десктопа на десктоп переносите, а вы переносите на сервер, тут вообще никаких гарантий успеха.
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
11.07.2017, 13:29  [ТС] 9
Итак, собрал static сборку qt, собрал ей программу, перемещаю на сервер, а там получаю: cannot execute binary file: Exec format error. Права выставлены 700. Собирал x64, вывод команды uname -a на сервере: Linux ******* 2.6.32-042stab120.20 #1 SMP Fri Mar 10 16:52:50 MSK 2017 x86_64 x86_64 x86_64 GNU/Linux. Что это значит?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.07.2017, 13:40 10
Все тоже:

Цитата Сообщение от Avazart Посмотреть сообщение
А вообще под линукс принято ставить пакеты, а не таскать "либы".
Цитата Сообщение от Avazart Посмотреть сообщение
Ставьте пакет Qt из реп и не морочьте ...
А программу из исходников собирайте прямо на сервере.
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
11.07.2017, 19:28  [ТС] 11
Проблема решена. Дело было в том что передача на сервер шла по ftp в ASCII режиме и файлы повреждались. Выяснилось это когда я пробивал исполнительный файл readelf`ом.
0
11.07.2017, 19:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2017, 19:28
Помогаю со студенческими работами здесь

Перенос приложения с БД на другой компьютер
Прет всем , есть такая проблемка я реализовал на на своём ноуте обычное приложение которое...

Перенос приложения на другой компьютер
Есть приложение Windows Forms, на моём компе всё работает. БД на localDB. Отправляю проект...

Перенос приложения с БД SQLite на другой компьютер
Столкнулся с следующей ситуацией: приложение с базой данных SQLite, написанное на C#, не...

База MSSQL и перенос приложения на другой компьютер
Доброго времени суток бойцы....такой вопросик хотелось бы задать... Написал я приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru