Есть приложение на qt работающее с бд и ip камерой. Сейчас собирается и запускается под виндовс.
Деплой происходит путем копирования exe и dll на машину.
Нужно его пересобрать под Linux. Как это правильно сделать? Достаточно будет просто пересобрать на целевой системе?
И как в этом случае распространять? Что делать если версия Qt будет отличаться от компа к компу? У нас сейчас 5.7
В общем как портировать Qt приложение с винды на линукс?
Здравствуйте, BlackEric, Вы писали:
BE>Нужно его пересобрать под Linux. Как это правильно сделать? Достаточно будет просто пересобрать на целевой системе? BE>И как в этом случае распространять? Что делать если версия Qt будет отличаться от компа к компу? У нас сейчас 5.7
Ну если у тебя используется только Qt API, то есть хороший шанс, что достаточно будет просто пересобрать. Если же используется какая-то виндовая специфика (например, прямые обращения к Win32 API), или какие-то нестандартные особенности виндового компилятора, придется с этими местами разбираться.
Что до распостранения, я вижу три варианта:
1. Собирать пакеты отдельно для каждого целевого дистрибутива линуха
2. Таскать все нужные библиотеки с собой
3. Собрать и распостранять snap
Пользователям, конечно, больше понравится первый вариант. При условии, что их любимый дистрибутив войдет в список целевых.
Здравствуйте, BlackEric, Вы писали:
BE>Есть приложение на qt работающее с бд и ip камерой. Сейчас собирается и запускается под виндовс. BE>Деплой происходит путем копирования exe и dll на машину.
Под Linux такое сразу не заработает, там нет правила что dll(.so) начинают искаться с той папки откуда запускается exe.
Поэтому вопросы, под какой или что сложнее какие дистрибутивы будет порт.
Если порт1 или их мало, посмотри на создание deb,rpm пакета где в зависимостях можно будет прописать системную Qt, тогда это уже дело пользователя как поставить нужную версию.
Ну и задача разбивается на собрать с системным Qt, создать пакет
BE>Нужно его пересобрать под Linux. Как это правильно сделать? Достаточно будет просто пересобрать на целевой системе? BE>И как в этом случае распространять? Что делать если версия Qt будет отличаться от компа к компу? У нас сейчас 5.7
Вариант номер 2, всё своё ношу с собой, для этого нужно будет собирать свой Qt на нужно дистрибутиве, прописывать откуда его грузить через LD_LIBRARY_PATH или RPATH, и тащить с собой в инсталяторе, следующая проблема, glibc(если уж совсем зоопарк дистрибутивов), тут я знаю только один вариант musl, раньше был еще lsb, но он вроде уже не развивается
BE>В общем как портировать Qt приложение с винды на линукс?
Если дистрибутив 1,2 то легко, самое простое, всё берешь с собой(или вообще системное), собираешь на целевой платформе и пакуешь в инсталятор, если очень много то либо много разных сборок либо эксперименты с musl, lsb. Ну или вообще распространять в исходниках, пусть каждый собирает по инструкции
Установка тоже будет моей проблемой. И настройка термопринтера для печати.
Это внутреннее приложение. Если скажем я его соберу в QtCreator под той же версий линукса что и будет у заказчика, то что мне нужно сделать что бы оно потом стало на комп где есть KDE и следовательно Qt той же версии, но нет средств разработки?
И сейчас конфиги лежат в папке приложения рядом с exe. Как правильно в линуске (скорее всего Debian будет) сделать?
Здравствуйте, BlackEric, Вы писали:
BE>Установка тоже будет моей проблемой. И настройка термопринтера для печати. BE>Это внутреннее приложение. Если скажем я его соберу в QtCreator под той же версий линукса что и будет у заказчика, то что мне нужно сделать что бы оно потом стало на комп где есть KDE и следовательно Qt той же версии, но нет средств разработки?
Попробуй просто перенести собранное приложение на другой компьютер и запустить BE>И сейчас конфиги лежат в папке приложения рядом с exe. Как правильно в линуске (скорее всего Debian будет) сделать?
1) Собираешь локально релиз в QtCreator, используя системный Qt
2) Cоздаешь program.deb пакет
3) Переносишь на другой компьютер делаешь sudo dpkg -i program.deb, и всё, запускаешь программу на другом компьютере.
Вообще настройки в Linux обычно лежат отдельно от exe, но это тебе уже сама система скажет если от пользователя не сможет изменить файл настроек.
Здравствуйте, BlackEric, Вы писали:
BE>И сейчас конфиги лежат в папке приложения рядом с exe. Как правильно в линуске (скорее всего Debian будет) сделать?
Какие именно настройки? Пользовательские данные которые можешь менять в ui хранишь в auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation), не забудь добавить setApplicationName setOrganizationDomain при старте. Должно работать на всех системах. Это приблизительно, ключевые слова для поиска ответов.