Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: blackliteon от Июль 29, 2005, 12:45



Название: компиляция приложений в qt4 под win32 ..... проблемы
Отправлено: blackliteon от Июль 29, 2005, 12:45
Привет.
Пытаюсь создать и откомпайлить проект:

qmake -project
qmake
nmake

версия qt коммерческая.
Так вот nmake не может найти хедеры (ну и есс-но либы) куте.
Как прописать их, чтобы было ему всё видно (nmake-у).

Спасибо.


Название: компиляция приложений в qt4 под win32 ..... проблемы
Отправлено: Racheengel от Июль 29, 2005, 14:22
а переменная окружения QMAKESPEC у тебя настроена?


Название: Переменная окружения
Отправлено: blackliteon от Июль 29, 2005, 15:03
Можно подробнее что за переменная и как её настроить ?


Название: компиляция приложений в qt4 под win32 ..... проблемы
Отправлено: Racheengel от Июль 29, 2005, 15:24
по идее, она служит для определения системы сборки (компилятора) и должна содержать название каталога с соответствующими инклудами (например, QMAKESPEC =win32-msvc.net). Устанавливается обычно автоматически. Кроме этого, должна быть установлена переменная QTDIR на корень инсталляции и PATH на подкаталог bin в инсталляции.


Название: вроде ясно
Отправлено: blackliteon от Июль 29, 2005, 15:52
Как думаешь, может qmake сам виноват (т.е. я его не полностью понял).
Примеры же компайлятся в начале установки, а не распаковываются, насколько я понял. А бинарники у меня в release лежат как пологен. Т.е. сама qt примеры компайлила без проблем. Интересно мнение


Название: компиляция приложений в qt4 под win32 ..... проблемы
Отправлено: L.Marvell от Июль 29, 2005, 16:40
My Computer -> Properties -> Advanced > Environments Variables

Смотрим: PATH, QMAKESPEC, QTDIR

Постим сюда.


Название: Здорово
Отправлено: blackliteon от Июль 29, 2005, 16:59
Спасибо.
Интересно, если INCLUDE прописывается тоже в "переменные окружения", как это делать для Qt? Там есть INCLUDE, только вот если обычно там прямо и лежат .h файлики, то в куте ещё один уровень поддиректорий (а в нём может быть ещё). Как тогда указать? И насколько я понял, опции Visual C6->Directories (include + lib) не действуют на nmake.


Название: Re: Здорово
Отправлено: LamerDrv от Июль 29, 2005, 18:52
Цитата: "blackliteon"
Спасибо.
Интересно, если INCLUDE прописывается тоже в "переменные окружения", как это делать для Qt? Там есть INCLUDE, только вот если обычно там прямо и лежат .h файлики, то в куте ещё один уровень поддиректорий (а в нём может быть ещё). Как тогда указать?

Иногда, если  директория include в свою очередь содержит набор подкаталогов, то в переменной окружения path прописывают путь к верхнему каталогу, а в листингах программ пишут примерно так
#include <QtCore\qbitarray.h>
Т.е. указывают имя подкаталога.
Но кстати, в случае с QT, вообще не надо ее директорию include прописывать в переменной окружения "include". Насколько я понимаю, qmake при создании файла nmake включает в него директиву INCPATH, в которой и прописаны пути к заголовочным файлам qt.
Так что как и сказал L.Marvell нужны следующие переменные окржуения
PATH = c:\qt\4.0.0\bin (или где там она у тебя)
QMAKESPEC = win32-msvc.net (для VS203.NET) или win32-msvc (для VC6)
QTDIR = c:\Qt\4.0.0 (или где там она у тебя)
INCLUDE = пути к include-директории VC и/или SDK
Цитата: "blackliteon"

И насколько я понял, опции Visual C6->Directories (include + lib) не действуют на nmake.

Да не действуют. Они действуют только внутри среды VC. Так что директория include из VC6 действительно должна быть происана в переменной окружения "include", чтобы nmake работал. Если не ошибаюсь где в недрах директории куда установлен VC есть bat-файл, который содержит команды SET INCLUDE (и т.п.), прописывающие все что надо для nmake (естественно это работает только для текущего консольного окна в котором запущен этот bat-файл). Аналогичный файл есть в QT (для него создается ярлык "Qt 4.0.0 Command Prompt"). Запускаешь ентот ярлык и в данной консоли qmake и nmake дожны работать нормально


Название: окей, большое спасибо
Отправлено: blackliteon от Июль 29, 2005, 19:18
Парни, большое спасибо!
Очень приятно за оперативную подднржку!


Название: блин....
Отправлено: blackliteon от Июль 29, 2005, 21:05
Блин, под консолью qt что-то хоть пошло. Но теперь пишет, что ей чего-то не хватает.... дурдом. Вообщем вначале писала, что не хватает private/qucomextra_p.h (не может найти). Выяснил, что из файлика
moc_configdialog.h:

/****************************************************************************
** ConfigDialog meta object code from reading C++ file 'configdialog.h'
**
** Created: ?? 28. ??? 20:07:28 2005
**      by: The Qt MOC ($Id: $)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

#undef QT_NO_COMPAT
#include "../../../configdialog.h"
#include <qmetaobject.h>
#include <qapplication.h>

#include <private/qucomextra_p.h>

пытался простой пример откомпайлить (hello world), тоже ругается на какие-то либы....... =(

Думал, может дело в старой куте (3-3-4), взял её переместил. Так теперь столько UNRESOLVED EXTERNAL SYMBOL-ов......


Название: Re: блин....
Отправлено: LamerDrv от Июль 30, 2005, 08:57
Цитата: "blackliteon"
Вообщем вначале писала, что не хватает private/qucomextra_p.h (не может найти).


Файл  qucomextra_p.h точно из QT3.3.4. В версии 4.0.0 такого нет
Кстати, в нем любопытный комментарий

// This file is not part of the Qt API.  This header file may
// change from version to version without notice, or even be
// removed.

Цитата: "blackliteon"

Думал, может дело в старой куте (3-3-4), взял её переместил.

Похоже в ней.
Проверь значения ранее упомянутых переменных окружения непосредственно в консольном окне командами SET QTDIR, SET QMAKESPEC и т.д.


Название: что творится.....
Отправлено: blackliteon от Июль 30, 2005, 10:21
Перекинулся на линь, ужас, думал хоть будет что-то.....

полностью откомпайлил за несколько часов опенсорсную куту.
Опять она мне откомпайлила бинарники (успешно).
а потом делаю:
qmake -project (работает)
qmake (пишет Project LOAD(): Feature qt_config cannot be found.)
nmake не работает (или нет makefile или ошибок миллион)
Переменные QTDIR, LD_...._LIB прописал - хоть makefile начал делаться (порядка 3-5 ошибок),
решил PATH ещё потрогать: потрогал..... ошибок штук 50 make начал давать.
С виндой осталось только qt3 полностью вырезать и поставить снова 4ую.


Название: а под виндой....
Отправлено: blackliteon от Июль 30, 2005, 11:30
Удалил полностью 3ю куте, думал может дело в ней.......
А теперь на первый туториал (даже мейк не переделывал, просто ввёл

nmake

)

   NMAKE -f Makefile.Release
   link /LIBPATH:"C:\Qt\4.0.0\lib" /LIBPATH:"C:\Qt\4.0.0\lib" /NOLOGO /SUBSYSTEM:WINDOWS /OUT:"release\t1.exe" @C:\DOCUME~1\6321~1.66C\LOCALS~1\Temp\nma02120.
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::_Mutex::_Unlock(void)" (__imp_?_Unlock@_Mutex@std@@QAEXXZ)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::_Mutex::_Lock(void)" (__imp_?_Lock@_Mutex@std@@QAEXXZ)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::locale::facet::_Register(void)" (__imp_?_Register@facet@locale@std@@QAEXXZ)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall bad_cast::bad_cast(char const *)" (__imp_??0bad_cast@@QAE@PBD@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned int __cdecl std::ctype<char>::_Getcat(class std::locale::facet const * *)" (__imp_?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class std::locale::facet const * __thiscall std::locale::_Getfacet(unsigned int)const " (__imp_?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Lockit::_Lockit(int)" (__imp_??0_Lockit@std@@QAE@H@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned int __cdecl std::ctype<unsigned short>::_Getcat(class std::locale::facet const * *)" (__imp_?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(unsigned int,char)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ID@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(unsigned short const *)" (__imp_??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(unsigned int,unsigned short)" (__imp_??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IG@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::_Osfx(void)" (__imp_?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::_Ipfx(bool)" (__imp_?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall std::basic_istream<char,struct std::char_traits<char> >::_Ipfx(bool)" (__imp_?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z)
qtmain.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::basic_ostream<char,struct std::char_traits<char> >::_Osfx(void)" (__imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ)
release\t1.exe : fatal error LNK1120: 16 unresolved externals


Название: компиляция приложений в qt4 под win32 ..... проблемы
Отправлено: LamerDrv от Июль 31, 2005, 09:48
Может у тебя переменная окружения QMAKESPEC установлена неправильно. (Например, равна "win32-msvc.net" в то время как ты используешь Visual C++6.0). Для Visal C++ 6.0 - должно быть равно "win32-msvc"

Насчет удаления 3-ей QT - это ты конечно погорячился. У меня (да и у других) стоят обе версии и работают. Хотя я, честно говоря, 3-ю уже не пробовал некоторое время, но с 4-ой все в порядке и третья ей никак не мешает.

Как вариант: может быть ты в переменные окружения include и/или lib пытался вписать пути к заголовкам и/или библиотекам самой QT? Как раз этого делать НЕ надо.

На всякий случай вот значения, которые у меня в системе (правда у меня Visual C++.NET, а не 6-ой):
PATH - e:\Qt\4.0.0\bin;E:\Qt\3.3.4\bin;...
QMAKESPEC - win32-msvc.net
QTDIR - e:\Qt\4.0.0
INCLUDE - E:\Program Files\VS2003\Vc7\include;E:\Program Files\VS2003\Vc7\PlatformSDK\Include
LIB - E:\Program Files\VS2003\Vc7\lib;E:\Program Files\VS2003\Vc7\PlatformSDK\Lib


Название: наверное ты прав
Отправлено: blackliteon от Август 01, 2005, 16:01
Может быть..... у меня стояла вместе с .net
Приду домой, попробую. Под линью запустил, правда оказалось что нужно из /usr/bin старый кумейк удалить, т.к. в путях он (эта директория) оказалась раньше. С меня пиво, если под виндой запустится qt


Название: qmake-то глупый
Отправлено: blackliteon от Август 01, 2005, 17:03
Хотя может совсем наоборот: глупый я.
Когда под линью qmake-ом делал проектный файл, незахотела компайлить потом мейком проект, вываливала ошибки. Что-то в проекте было с ресурсными файлами, решил проверить эти проектные файлы (что был в примерах до меня и мой проектный файл). Различались в 2 раза..... При этом каких-то серьёзных параметров для кумейка в доках не нашёл. Придётся работать ручками........  :(