Russian Qt Forum
Сентябрь 30, 2024, 16:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: почему статическая сборка лезет в DLL (было не запускается приложение)?  (Прочитано 8249 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Февраль 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, и все равно не работает
« Последнее редактирование: Февраль 17, 2010, 12:33 от Гурман » Записан

2^7-1 == 127, задумайтесь...
cya-st
Гость
« Ответ #1 : Февраль 17, 2010, 11:44 »

Настрой правильно переменные среды, и посмотри нет ли дубликатов QtCored4.dll.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Февраль 17, 2010, 11:50 »

переменные среды проверял, вроде все верно, ссылки только на QTDIR=c:\qt\2009.03\qt и в PATH только туда же маршрут прописан

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

но почему оно вообще обращается к своим .dll если приложение собрано (по идее должно быть собрано) статически?
« Последнее редактирование: Февраль 17, 2010, 11:58 от Гурман » Записан

2^7-1 == 127, задумайтесь...
cya-st
Гость
« Ответ #3 : Февраль 17, 2010, 12:14 »

Цитировать
но почему оно вообще обращается к своим .dll если приложение собрано (по идее должно быть собрано) статически?
а какой размер файла при статической сборке?
Записан
cya-st
Гость
« Ответ #4 : Февраль 17, 2010, 12:20 »

Сорри, вижу
Цитировать
9+ мегабайт
, если собираеш QTCreator-ом, то посмотри в переменных среды, нет ли указания на QTCreator\bin
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #5 : Февраль 17, 2010, 12:24 »

Цитировать
какой размер файла при статической сборке?

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

собирал и динамически, получалось приложение ~700 кБайт, как и должно быть (размер моей библиотеки ~650 кБайт)
глюк победил, действительно была предыдущая версия библиотек сбоку, и в PATH вкралась незаметная ошибка, все поправил, запускается, но тем не менее вопрос, почему оно лазит в DLL
« Последнее редактирование: Февраль 17, 2010, 12:32 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Февраль 17, 2010, 12:51 »

открыл этот бинарник программой dependency walker - там все зависимости только от MS-библиотек, от Qt нету вообще...
Записан

2^7-1 == 127, задумайтесь...
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Февраль 17, 2010, 16:11 »

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

Юра.
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #8 : Февраль 18, 2010, 09:07 »

Цитировать
Куда подставляются?

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

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

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

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

может оно будет нормально, если без отладчика версию собрать...
« Последнее редактирование: Февраль 18, 2010, 10:19 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 23.