Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Гурман от Февраль 17, 2010, 10:10



Название: почему статическая сборка лезет в DLL (было не запускается приложение)?
Отправлено: Гурман от Февраль 17, 2010, 10:10
собираю приложение в QtCreator 1.2.1 от Qt 4.5.3, сборка статическая, файл .pro имеет вид:

Код:
TARGET = <имя приложения>
TEMPLATE = app

SOURCES += <исходники>
INCLUDEPATH += <инклюды>
HEADERS += <хидеры>
FORMS += <форма>

LIBS += <маршрут/своя_библиотека_с_отладчиком.a> \
    -lQtGuid4 \
    -lQtCored4

сборка в профиле Debug, библиотека собрана в аналогичном профиле, приложение собирается статически, получается .exe размером 9+ мегабайт, но при запуске выдает транспарант

Цитировать
Точка входа в процедуру _Z13qFlagLocationPKc не найдена в библиотеке DLL QtCored4.dll

с таким ни разу не сталкивался, как это победить?

пробовал собирать динамически, тоже самое

кстати, если не указать библиотеки QtGuid4 и QtCored4, то почему-то автоматически подставляются их версии без отладчика QtGui4 и QtCore4, и все равно не работает


Название: Re: не запускается приложение, не найден FlagLocator в QtCored4.dll
Отправлено: cya-st от Февраль 17, 2010, 11:44
Настрой правильно переменные среды, и посмотри нет ли дубликатов QtCored4.dll.


Название: Re: не запускается приложение, не найден FlagLocator в QtCored4.dll
Отправлено: Гурман от Февраль 17, 2010, 11:50
переменные среды проверял, вроде все верно, ссылки только на QTDIR=c:\qt\2009.03\qt и в PATH только туда же маршрут прописан

рядом с .exe никаких .dll нет вообще

но почему оно вообще обращается к своим .dll если приложение собрано (по идее должно быть собрано) статически?


Название: Re: не запускается приложение, не найден qFlagLocation в QtCored4.dll
Отправлено: cya-st от Февраль 17, 2010, 12:14
Цитировать
но почему оно вообще обращается к своим .dll если приложение собрано (по идее должно быть собрано) статически?
а какой размер файла при статической сборке?


Название: Re: не запускается приложение, не найден qFlagLocation в QtCored4.dll
Отправлено: cya-st от Февраль 17, 2010, 12:20
Сорри, вижу
Цитировать
9+ мегабайт
, если собираеш QTCreator-ом, то посмотри в переменных среды, нет ли указания на QTCreator\bin


Название: Re: не запускается приложение, не найден qFlagLocation в QtCored4.dll
Отправлено: Гурман от Февраль 17, 2010, 12:24
Цитировать
какой размер файла при статической сборке?

9+ МБ, при статической сборке в VisualStudio получается 12+ Мбайт (у мелокомягких всегда жира больше...  ;D)

собирал и динамически, получалось приложение ~700 кБайт, как и должно быть (размер моей библиотеки ~650 кБайт)
глюк победил, действительно была предыдущая версия библиотек сбоку, и в PATH вкралась незаметная ошибка, все поправил, запускается, но тем не менее вопрос, почему оно лазит в DLL


Название: Re: почему статическая сборка лезет в DLL (было не запускается приложение)?
Отправлено: Гурман от Февраль 17, 2010, 12:51
открыл этот бинарник программой dependency walker - там все зависимости только от MS-библиотек, от Qt нету вообще...


Название: Re: почему статическая сборка лезет в DLL (было не запускается приложение)?
Отправлено: lit-uriy от Февраль 17, 2010, 16:11
Цитировать
кстати, если не указать библиотеки QtGuid4 и QtCored4, то почему-то автоматически подставляются их версии без отладчика QtGui4 и QtCore4, и все равно не работает
Куда подставляются?


Название: Re: почему статическая сборка лезет в DLL (было не запускается приложение)?
Отправлено: Гурман от Февраль 18, 2010, 09:07
Цитировать
Куда подставляются?

в командную строку вызова компоновщика

но это уже не существенно, существенно, что после нормальной статической сборки бинарник размером 9 мегов не запускается без библиотек mingwm10.dll и QtCored4.dll (хотя последняя явно подшивается в виде QtCored4.a), причем запуск производится не из gdb, а из командной строки

ну mindwm10.dll ладно, с ним могут быть нюансы, но почему требуется QtCored4.dll??

единственное разумное объяснение - в QtCored4.a отсутствует что-то, что есть в QtCored4.dll, но блин же обе библиотеки искаропки

может оно будет нормально, если без отладчика версию собрать...