LINUX.ORG.RU

Qt 5.4.2: Забыли положить файл, или я чего-то не понимаю?

 


0

3

Установил Qt 5.4.2.

При компиляции своей прграммы имею следующую ошибку:

/opt/Qt_5_4_2/5.4/gcc/include/QtCore/qt_windows.h:63:21: fatal error: windows.h: No such file or directory
 #include <windows.h>
                     ^
compilation terminated.
Makefile:20184: recipe for target 'build/qtlockedfile_win.o' failed
make: *** [build/qtlockedfile_win.o] Error 1
00:25:15: Процесс «/usr/bin/make» завершился с кодом 2.

Эту ошибку вызывает следующий код в файле gcc/include/QtCore/qt_windows.h:

...
#ifndef NOMINMAX
#  define NOMINMAX
#endif
#include <windows.h>

#if defined(_WIN32_IE) && _WIN32_IE < 0x0501
#  undef _WIN32_IE
#endif
#if !defined(_WIN32_IE)
#  define _WIN32_IE 0x0501
#endif

#ifdef _WIN32_WCE
#include <ceconfig.h>
#endif
...

На этом знакомство с Qt 5.4.2 пока что прекратилось. Как-нибудь можно исправить это недоразумение?

ОС Debian Stable.

★★★★★

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

Windows.h на винде является системным файлом. Подробностей отсыпать не хочешь?

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

Какие еще подробности? Скачал с официального сайта релиз:

http://download.qt.io/official_releases/qt/5.4/5.4.2/qt-opensource-linux-x86-...

Установил, стал компилировать программу, которая нормально собирается в Qt с версии 4.8.6 по версию 5.3.2. А в 5.4.2 сборка не идет по причине вышеуказанной ошибки.

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

Какие еще подробности? Скачал с официального сайта релиз

Из твоего поста понятно 2 вещи: Qt установлен в /opt; у тебя какие-то проблемы с windows.h.

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

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

Нет, просто подметил, необычно уже в наши дни. Ты на всех версиях от 4.8 до 5.3 проверял именно на x86?

Adonai ★★★
()

Твой компилятор не может найти windows.h, уверен, что он существует? Похоже нехватает каких-то пакетов, чего-то вроде mingw-winapi (не знаю как оно точно называется).

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

qt_windows.h - код поддержки винды, в линуксе никаким краем инклудиться не может. Возможно тебя в проекте Windows-only инклуды или же виндовые дефайны, которые пугают Qt (менее вероятно).

З.Ы. Вытащи с Debian Testing пакеты Qt 5.4.2 и перестань конпелять Qt.

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

Что ты собираешь?

Собираю вот это:

https://github.com/xintrea/mytetra_dev/commit/6f7bdbfffd4626c4e68c04e1006dd27...

Чем?

Qt Creator 3.4.1, который идет в комплекте с Qt 5.4.2

Подо что?

Под Debian Stable.

Если Qt пытается заинклудить виндовый хидер, значит он думает что таргет – винда. Почему?

Понятия не имею.

Пробовал собрать в консоли в той же среде, что создает QtCreator:

export QTDIR=/opt/Qt_5_4_2/5.4/gcc
 
LD_LIBRARY_PATH=$QTDIR:$QTDIR/lib:$QTDIR/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

PATH=/opt/Qt_5_4_2/5.4/gcc/bin:/usr/bin:/usr/local/bin:/usr/bin:/bin
export PATH

rm -f ./bin/mytetra

qmake mytetra.pro

make clean
make

Лезет та же самая ошибка.

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

Твой компилятор не может найти windows.h, уверен, что он существует?

Нашел только вотэта:

# locate windows.h | grep \/windows.h$
/usr/include/directfb-internal/core/windows.h

Похоже нехватает каких-то пакетов, чего-то вроде mingw-winapi (не знаю как оно точно называется).

Так зачем в линухе mingw когда gcc есть?

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

Вытащи с Debian Testing пакеты Qt 5.4.2 и перестань конпелять Qt.

Я не кмопеляю. В официальном релизе Qt собранный идет.

Xintrea ★★★★★
() автор топика

У меня твоя ерунда собирается в арче (qt 5.4.2, x86_64, git clone https://github.com/xintrea/mytetra_dev && cd mytetra_dev && qmake && make)

QTDIR у тебя выглядит немного странно. Точно на «gcc» должно заканчиваться?

А вообще, как правильно сказали, прекрати качать всякую бяку и возьми qt из дистрибутива.

htop
()
Ответ на: комментарий от Pavval

Блин, windows.h - главный хедер WinAPI. qt_windows.h - поддержка венды в Qt. Ищи откуда эта срань включается.

Эта срань оказывается в qtSingleApplication засела:

#include <qt_windows.h>

И эта срань собиралась вплоть до Qt 5.3.2.

А в 5.4.2 - перестала.

Впринципе, я могу обновить qtSingleApplication, но тогда потеряется совместимость с Qt 4.8.x.

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

Кстати, я только что нормально собрал его Qt 5.3.2 из Дебиана.

О том то и речь, что в Qt 5.3.2 все нормально компилится.

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

Обновил Дебиан и собрал с 5.4.2

Покажи мне вывод:

# locate windows.h | grep \/windows.h$

плиз.

У тебя что-нибудь из этих пакетов стоит?

/usr/i686-w64-mingw32/include/windows.h 	mingw-w64-i686-dev
/usr/include/i386-linux-gnu/winpr/windows.h 	libwinpr-dev [i386] 
/usr/include/wine/windows/windows.h 	libwine-dev [amd64, powerpc, i386, kfreebsd-i386] 
/usr/share/mingw-w64/include/windows.h 	mingw-w64-common [not s390] 
Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea
valentine ~/tmp/2 $  locate windows.h | grep \/windows.h$
/home/valentine/projects/wine/wine-git/include/windows.h
/home/valentine/projects/wine/wine-git2/include/windows.h

Я тебе еще раз говорю: ни при каких раскладах windows.h инклудиться не может.

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

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

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

Эта срань оказывается в qtSingleApplication засела:

Оно там внутри

#if defined(Q_OS_WIN)

Уверен, что у тебя не экспортируются ещё какие-нибудь переменные окружения, которые заставляют Qt думать, что оно собирает под винду?

htop
()
Ответ на: комментарий от Adonai

И что в связи с этим? Вдруг появится Q_OS_WIN? Q_OS_WIN определяется самим Qt. И от предсобранного Qt я бы и не таких приключений ожидал.

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

Уверен, что у тебя не экспортируются ещё какие-нибудь переменные окружения, которые заставляют Qt думать, что оно собирает под винду?

Еще раз: запускаю просто из консоли вот таким скриптом. (Добавил env чтоб посмотреть переменные окружения. Никакого криминала не вижу):

export QTDIR=/opt/Qt_5_4_2/5.4/gcc
 
LD_LIBRARY_PATH=$QTDIR:$QTDIR/lib:$QTDIR/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

PATH=/opt/Qt_5_4_2/5.4/gcc/bin:/usr/bin:/usr/local/bin:/usr/bin:/bin
export PATH

env

rm -f ./bin/mytetra

qmake mytetra.pro

make clean
make


Мне выдается следующий вывод:

$ ./make_qt_5_4_2.sh
__GL_YIELD=USLEEP
SSH_AGENT_PID=3749
KDE_MULTIHEAD=false
DM_CONTROL=/var/run/xdmctl
SHELL=/bin/bash
TERM=xterm
XDG_SESSION_COOKIE=97362b7e91a03bc6012df8a74b6a6595-1435860423.695787-1382767103
XDM_MANAGED=method=classic
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/xi/.gtkrc-2.0:/home/xi/.kde/share/config/gtkrc-2.0
KONSOLE_DBUS_SERVICE=:1.50
KONSOLE_PROFILE_NAME=Командная оболочка
GS_LIB=/home/xi/.fonts
GTK_RC_FILES=/etc/gtk/gtkrc:/home/xi/.gtkrc:/home/xi/.kde/share/config/gtkrc
WINDOWID=75497498
QTDIR=/opt/Qt_5_4_2/5.4/gcc
SHELL_SESSION_ID=b78deb6b2c8c4000a32f5423a012526f
KDE_FULL_SESSION=true
USER=xi
LD_LIBRARY_PATH=/opt/Qt_5_4_2/5.4/gcc:/opt/Qt_5_4_2/5.4/gcc/lib:/opt/Qt_5_4_2/5.4/gcc/bin:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
SSH_AUTH_SOCK=/tmp/ssh-TqoltotbgFkQ/agent.3680
SESSION_MANAGER=local/pangolinux:@/tmp/.ICE-unix/3899,unix/pangolinux:/tmp/.ICE-unix/3899
MC_TMPDIR=/tmp/mc-xi
DESKTOP_SESSION=default
PATH=/opt/Qt_5_4_2/5.4/gcc/bin:/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/opera:/usr/lib/opera/plugins
PWD=/home/xi/work/game_ksi/mytetra
EDITOR=kwrite 2>/dev/null 1>/dev/null
KDE_SESSION_UID=500
LANG=ru_RU.UTF-8
KONSOLE_DBUS_SESSION=/Sessions/1
HISTCONTROL=ignoreboth
HOME=/home/xi
COLORFGBG=15;0
SHLVL=3
KDE_SESSION_VERSION=4
LANGUAGE=
XCURSOR_THEME=Oxygen_White
MC_SID=4573
LOGNAME=xi
XDG_DATA_DIRS=/usr/share:/usr/share:/usr/local/share
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-EVMYyrEEjz,guid=5e7d2e906b59ca88a965586155957dc7
WINDOWPATH=7
PROFILEHOME=
DISPLAY=:0
QT_PLUGIN_PATH=/home/xi/.kde/lib/kde4/plugins/:/usr/lib/kde4/plugins/
XDG_CURRENT_DESKTOP=KDE
KEYBOARD_KEY_TIMEOUT_US=1000
_=/usr/bin/env
Project MESSAGE: Building running in Qt major version: 5
Project MESSAGE: Value of QT_NO_SESSIONMANAGER is:
Project MESSAGE: Building the any OS version...
Project MESSAGE: Set installation directory for binary file to /usr/local/bin
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DANY_OS=1 -DMEEGO_OS=2 -DANDROID_OS=3 -DTARGET_OS=ANY_OS -DQT_SVG_LIB -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -Isrc -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtSvg -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtPrintSupport -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtGui -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtXml -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtNetwork -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtCore -Ibuild -I/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/mkspecs/linux-g++ -o build/qtlockedfile_win.o src/libraries/qtSingleApplication/qtlockedfile_win.cpp
In file included from src/libraries/qtSingleApplication/qtlockedfile_win.cpp:48:0:
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtCore/qt_windows.h:63:21: fatal error: windows.h: Нет такого файла или каталога
 #include <windows.h>
                     ^
compilation terminated.
Makefile:20198: ошибка выполнения рецепта для цели «build/qtlockedfile_win.o»
make: *** [build/qtlockedfile_win.o] Ошибка 1

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

src/libraries/qtSingleApplication/qtlockedfile_win.cpp

это что-то совсем не так у тебя происходит.

этот файл вообще никогда не должен собираться отдельно, он включается в qtlocalpeer.cpp (см., допустим, git grep qtlockedfile_win).

попробуй сделать чистый чекаут твоего репозитория и собрать из него.

htop
()

Энжой ёр qmake, наверное. Он вообще зачастую странно воспринимает изменения в проекте на диске.

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

ещё на то, что у тебя остался какой-то старый стейт qmake, косвенно указывает

qtSingleApplication

в строчке вызова gcc, тогда как согласно .pro должно быть qtSingleApplication5

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

Так, походу нашел.

У меня в файле проекта для класса qtlockedfile просто прописаны *.cpp файлы для сборки без учета версии Qt.

SOURCES = src/main.cpp \
    ...
    src/libraries/qtSingleApplication/qtlockedfile_unix.cpp \
    src/libraries/qtSingleApplication/qtlockedfile_win.cpp \
    src/libraries/qtSingleApplication5/qtlockedfile_unix.cpp \
    src/libraries/qtSingleApplication5/qtlockedfile_win.cpp \


Разнес их ниже в соответствующие блоки

lessThan(QT_MAJOR_VERSION,5) {...


Компиляция прошла.

Вопрос в том, почему Qt 5.3.2 мог компилировать такой проект, а Qt 5.4.2 нет, остается открытым.


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

Вопрос в том, почему Qt 5.3.2 мог компилировать такой проект

не думаю, что мог. в репозитории на гитхабе у тебя в .pro нет того, что ты заквотил.

а вообще у этой либы есть свой .pri, который наверное надо include()ить в свой .pro, и вообще руками в SOURCES ничего из qtSingleApplication не добавлять.

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

не думаю, что мог. в репозитории на гитхабе у тебя в .pro нет того, что ты заквотил.

Есть, это выдержка из *.pro файла.

И Qt 5.3.2 и сейчас может, он у меня стоит и нормально компилит.

Но полюбасу исправить надо было, хорошо что щас отловил этот косяк.

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

i686-w64-mingw32

Ты, случаем, не mingw для сборки qt юзал? Может qt поэтому думает, что у тебя винда?

cherry-pick
()
Ответ на: комментарий от Xintrea

Кстати вот вся эта хрень с QTDIR по идее ( == УМВР) не нужна. Для выбора нужной версии Qt тебе достаточно запустить нужный qmake. В твоем случае — что-нибудь типа /opt/Qt_5_4_2/5.4/gcc/bin/qmake.

Ну и да, проблема у тебя где-то в qmake'е.

/* Мелким шрифтом */ Сколько раз говорили использовать cmake, а не этот обрезок системы сборки...

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

Я, оказывается, дал ссылку на предыдущий (неизмененный) коммит, до ветвления - на последний коммит в ветке experimental.

Коммит, на котором была ошибка (он первый в ветке useRecordTableController):

https://github.com/xintrea/mytetra_dev/commit/1f14d784afb20806c8f427bba4ac29b...

Там видно следующее:

- src/libraries/wyedit/EditorShowText.cpp
+ src/libraries/wyedit/EditorShowText.cpp \
+ src/libraries/qtSingleApplication/qtlockedfile_unix.cpp \
+ src/libraries/qtSingleApplication/qtlockedfile_win.cpp \
+ src/libraries/qtSingleApplication5/qtlockedfile_unix.cpp \
+ src/libraries/qtSingleApplication5/qtlockedfile_win.cpp \
+ src/controllers/recordTable/recordTableController.cpp


Так вот, я лично только создал класс recordTableController через мастер. А QtCreator по ему только ведомой логике зачем-то добавил файлы qtlockedfile_unix.cpp и qtlockedfile_win.cpp. Возможно, QtCreator как-то анализирует исходники проекта и сам добавляет в проект файлы, которые считает нужными.

После этого компиляция в Linux на файле qtlockedfile_win.cpp и стала затыкаться.

Поэтому решение Qt 5.4.2: Забыли положить файл, или я чего-то не понимаю? (комментарий) остается в силе.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.