LINUX.ORG.RU

texmaker 5 требует qt5 >=5.7

 


0

1

Решил потыкать новый texmaker 5, но на сайте есть версия только для ubuntu 17, а у меня 16.04. Там же сказано что нужен qt5 >=5.7. Я скачал qt-opensource-linux-x64-5.10.1.run с официального сайта qt, но как-то побаиваюсь его запускать (размер 1Гб), не рухнуло бы все. В этих qt не разбираюсь. Подскажите, не рухнет ли все? И стоил ли вообще это делать ради того, чтобы потыкать в новую версию.

Если хочешь попробовать, то собирай texmaker из исходников со скачанным Qt. Ничего не рухнет, так как скачанный файл является установочным пакетом.

kachsheev ★★ ()

Самый надёжный способ, имхо - собрать нужную версию Qt статически в отдельном каталоге, а потом собрать с ней интересующую тебя программу. При этом гарантированно ничего не рухнет и не загадится.

Но способ трудозатратный по времени. Во-первых, сама сборка Qt может идти несколько часов, во вторых, желательно перед этим разобраться с ключами configure (это, кстати, сильно поможет сборку ускорить). Я этим занимался под виндой. В линуксе процесс должен быть намного проще, ибо питон, openssl и прочее ставится из репозиториев, и в отличие от винды не надо забивать абсолютные пути (кроме пути к qmake, который определяет версию Qt). Но на ключи configure из моей заметки посмотри, они должны быть сильно похожие.

Ну а нужно ли тебе это - решай сам.

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от kachsheev

Если поставить QT нужной версии, то, я думаю, можно установить и deb пакетом для 17.04. Насчет «рухнет» я имел в виду другое. QT, как я понимаю, уже используется другими программами. Если я сейчас запущу установку QT последней версии, то эти программы не поломаются?

rustamych ★★ ()

Инсталлятор Qt спрашивает куда нужно ставить Qt. Системную Qt он затирает. Если поставить сторонние версии Qt5 куда-нибудь в /opt, то ничего не поломается. Texmaker'у нужно потом указать на эту инсталляцию Qt.

Лучше собрать texmaker из исходников с системной версией Qt5. Он не должен чего-то явно требовать из последней версии.

DarthVadimius ★★ ()
Ответ на: комментарий от DarthVadimius

kachsheev Скомпилил на виртуалке. Сначала поставил Qt в /opt. Потом запустил qmake с путем из этой директории, ну потом make и make install. Получился бинарник. Запустил, потыкал. Новых функций и усовершенствований нет, только поменялась морда, теперь вся черно-белая. Когда то это была моя основная прога для работы с техом, сейчас пользую texworks, но слежу за развитием texmaker и texstudio. Попробовал запустить этот бинарник на своей машине где версия Qt ниже требуемой. Не запустился и стал требовать Qt >=5.7. Я не программист, вопрос такой - нельзя ли скомпилить такой бинарник, чтоб в нем внутри были все требуемые части Qt?

rustamych ★★ ()
Ответ на: комментарий от rustamych

нельзя ли скомпилить такой бинарник, чтоб в нем внутри были все требуемые части Qt?

Можно. Это называется статическая линковка. Чтобы слинковать Qt статически, его нужно сначала пересобрать, т.к. в стандартной поставке идут только динамические библиотеки *.so, а для статической линковки нужны статические библиотеки *.a

Нужные динамические библиотеки можно подсунуть программе через LD_LIBRARY_PATH При этом можно сделать так, чтобы перекрывалась системная версия библиотеки.

DarthVadimius ★★ ()
Ответ на: комментарий от rustamych

по-дефолту ему не нужен 5.7 вообще, просто разработчик поленился написать правильные правила и добавить одну строку в код. Вот патч (сохранить как fix.diff):

diff -pruN texmaker-5.0.2.o/main.cpp texmaker-5.0.2/main.cpp
--- texmaker-5.0.2.o/main.cpp   2017-07-27 09:11:53.000000000 +0300
+++ texmaker-5.0.2/main.cpp     2018-04-24 20:27:02.308004399 +0300
@@ -46,8 +46,10 @@ for (QStringList::Iterator it = ++(rawar
     }
 
 #if !defined(Q_OS_MAC)
+#if QT_VERSION >= QT_VERSION_CHECK(5,6,0)
 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
 #endif
+#endif
 QStringList g_qtFlags = {"--disable-gpu"};
 char **newArgv = appendCommandLineArguments(argc, argv, g_qtFlags);
 int newArgc = argc + g_qtFlags.size();
diff -pruN texmaker-5.0.2.o/texmaker.pro texmaker-5.0.2/texmaker.pro
--- texmaker-5.0.2.o/texmaker.pro       2017-08-13 16:20:49.000000000 +0300
+++ texmaker-5.0.2/texmaker.pro 2018-04-24 20:29:07.896005131 +0300
@@ -12,7 +12,7 @@ TEXMAKERVERSION=5.0.2
 DEFINES += TEXMAKERVERSION=$${TEXMAKERVERSION}
 
 
-equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 6) {
+equals(QT_MAJOR_VERSION, 5) {
 QT += core gui widgets xml network printsupport concurrent core-private script
 equals(INTERNALBROWSER,yes){
 QT += webenginewidgets


Компиляция как-то так:

sudo apt install build-essential qtbase5-dev qtchooser
cd texmaker-5.0.2/
patch -p1 < fix.diff
export QT_SELECT=qt5
qmake && make -j2

former_anonymous ★★ ()
Последнее исправление: former_anonymous (всего исправлений: 1)
Ответ на: комментарий от former_anonymous

Не катит твоя мантра.

$ patch -p1 < fix.diff 
patching file main.cpp
Hunk #1 FAILED at 46.
1 out of 1 hunk FAILED -- saving rejects to file main.cpp.rej
patching file texmaker.pro
Далее
$ qmake
Project MESSAGE: This project is using private headers and will therefore be tied to this specific Qt module build version.
Project MESSAGE: Running this project against other versions of the Qt modules may crash at any arbitrary point.
Project MESSAGE: This is not a bug, but a result of using Qt internals. You have been warned!
И на make -j2 получаем
main.cpp:49:32: error: ‘AA_EnableHighDpiScaling’ is not a member of ‘Qt’
 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
                                ^
Makefile:3858: ошибка выполнения рецепта для цели «.obj/main.o»
make: *** [.obj/main.o] Ошибка 1
make: *** Ожидание завершения заданий…
Что-то 46 не нравится. Я не программист, поэтому для меня это мантра. Может чего подкрутить надо?

rustamych ★★ ()
Ответ на: комментарий от rustamych

1 out of 1 hunk FAILED

У тебя какой texmaker? Патч для последней версии 5.0.2
Update: да, что-то я накосячил. Сейчас поправлю. Лор косячит патч.

former_anonymous ★★ ()
Последнее исправление: former_anonymous (всего исправлений: 2)
Ответ на: комментарий от former_anonymous

Версия 5.0.2. Попробовал с новым патчем. Вывод qmake:

$ qmake
Project MESSAGE: This project is using private headers and will therefore be tied to this specific Qt module build version.
Project MESSAGE: Running this project against other versions of the Qt modules may crash at any arbitrary point.
Project MESSAGE: This is not a bug, but a result of using Qt internals. You have been warned!
Тут как бы нормально, только предупреждение, не баг. Вывод make -j2:
qpdfbookmarkmodel.cpp:47:42: fatal error: private/qabstractitemmodel_p.h: Нет такого файла или каталога
compilation terminated.
Makefile:4979: ошибка выполнения рецепта для цели «.obj/qpdfbookmarkmodel.o»
make: *** [.obj/qpdfbookmarkmodel.o] Ошибка 1
make: *** Ожидание завершения заданий…
Что-то не то в Датском королевстве ...

rustamych ★★ ()
Ответ на: комментарий от former_anonymous

Сработало. Вы - мастер, однако. Коротенько опишите, что делает этот патч? Я хоть и не программист, но хотел бы понять, что происходит. Автор проги особо отметил, что нужен qt >= 5.7, но получается, что и без этого можно поставить. Как то непонятно.

rustamych ★★ ()
Ответ на: комментарий от rustamych

При применении этого патча отключается поддержка HiDPI-дисплеев, соответственно TexMaker на современных дисплеях будет выглядеть неюзабельно.

EXL ★★★★★ ()
Ответ на: комментарий от rustamych

про highdpi уже написали. Qt 5.7 ещё нужен для реализации встроенного браузера на основе WebEngine, который используется видимо для какого-то предпросмотра. НО этот браузер по-умолчанию отключён и не компилируется. Поэтому всё что нужно сделать чтобы скомпилировать на старой версии Qt - это отключить highdpi.

former_anonymous ★★ ()
Ответ на: комментарий от former_anonymous

На другом компе с той же операционкой почему то не проходит, qmake дает другую ошибку

Project ERROR: Unknown module(s) in QT: script
libqt5script5 стоит

rustamych ★★ ()
Последнее исправление: rustamych (всего исправлений: 1)