Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Aleksey_Zh от Ноябрь 10, 2009, 15:38



Название: Статическая и динамическая сборка библиотек.
Отправлено: Aleksey_Zh от Ноябрь 10, 2009, 15:38
В Qt я пока новичок.
1. Подскажите, в чем разница в статической и динамической сборки библиотек. Грубо говоря есть у меня некоторая dll. Путем несложных махинаций я ее превращая в файл с расширением .a Добавляю в проект как LIBS+=имя библиотеки.
Это какая сборка?
2. В чем разница между статическим и динамическим подключением библиотек. И как осуществляется одно и другое?

P.S. Windows/mingw


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Igors от Ноябрь 10, 2009, 16:10
В Qt я пока новичок.
1. Подскажите, в чем разница в статической и динамической сборки библиотек. Грубо говоря есть у меня некоторая dll. Путем несложных махинаций я ее превращая в файл с расширением .a Добавляю в проект как LIBS+=имя библиотеки.
Это какая сборка?
2. В чем разница между статическим и динамическим подключением библиотек. И как осуществляется одно и другое?
Qt здесь ни при чем. Насколько я знаю (опыт в Линукс 1 месяц) .а - статическая библиотека, .so - динамическая. В общем случае (для любой платформы)

- статическая вливается в исполняемый файл, результат тот же как если все ф-ции библиотеки написаны в программе
 
- динамическая вызывает функции других модулей. Исполняемый файл меньше но не запустится если нужные модули не найдутся

Динамические библиотеки могут быть замаскированы под статические (вероятно это результат упоминаемых Вами махинаций). Например в том же Вындоуз (MS 2009) я подключаю к проекту

- kernel32.lib
- mycalc.lib

В обоих есть ф-ции которые программа вызывает. Но в mycalc.lib - это сами ф-ции (статически) а в kernel32.lib - это вызовы нужных ф-ций из модуля kernel (динамчески). Никто не мешает быть статической либе просто "оберткой" для динамческой.

Ну и все это конечно как я себе это представляю и как достаточно для моих задач. А вообще в этом вопросе не силен и хотелось бы услышать мнения знатоков :)


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Aleksey_Zh от Ноябрь 10, 2009, 16:22
Спасибо Igors! Сейчас гуглил по нету и пришел такому же мнению насчет статики(что это *.а). Про динамические библиотеки - думал что это только dll. Подскажите, если знаете, в чем отличается динамическая от статической линковки. И как к динамически собранной куте прилинковать статическую библиотеку.


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Авварон от Ноябрь 10, 2009, 16:31
при статике как уже сказано весь код встраивается в твое приложение
при динамике в бинарнике только вызовы к dll
когда ты собираешь приложение, ты указывашь путь к библиотеке (-Lpath). Если по этому пути лежит .dll то линкуется к динамически ней. Если там есть .а, то идет статик линк. Проверено на вин\мак. Возможно есть способ указать напрямую тип линковки (может быть даже через CONFIG+=static в своем приложении)


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Igors от Ноябрь 10, 2009, 16:36
Спасибо Igors! Сейчас гуглил по нету и пришел такому же мнению насчет статики(что это *.а). Про динамические библиотеки - думал что это только dll. Подскажите, если знаете, в чем отличается динамическая от статической линковки. И как к динамически собранной куте прилинковать статическую библиотеку.
Динамическим модулем может быть файл с любым именем/расширением. В 1 проекте может быть сколько угодно статических и динамических библиотек - это не вопрос. Но каждая ф-ция должна быть определена только в 1 библиотеке - иначе не слинкуется. То есть библиотеки не должны "пересекаться".

Ф-ция статической либы линкуется точно так же как и ф-ция написанная в программе. Для ф-ции вызываемой динамически компилятор строит специальные дополнения в коде - на каждой платформе по-разному и рассказывать довольно долго, но смысл один -  обеспечить вызов ф-ции из др. модуля.


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Aleksey_Zh от Ноябрь 10, 2009, 22:28
Авварон, CONFIG+=static - это куда именно прописывается? И как система поймет, что это относится к конкретной библиотеке?


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Авварон от Ноябрь 11, 2009, 01:12
это пишется в .pro-файл. Никак. Как я уже отмечал выше, она старается линковаться динамически, если динамики нет, пробует статику. Если и ее нет, ругается. Мб этот конфиг помняет порядок - заставит сначала пробовать статику. Но если и сработает, то для всех библиотек проекта


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: lit-uriy от Ноябрь 11, 2009, 04:25
Aleksey_Zh, а речь идёт про виндовоз?


Название: Re: Статическая и динамическая сборка библиотек.
Отправлено: Aleksey_Zh от Ноябрь 11, 2009, 08:40
Да, конечно про Windows+mingw. Сейчас поправлю заголовок.