crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в MinGW32, Статическая и динамическая сборка, *.dll и *.a
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BRE Дата 17.3.2009, 9:28
 
Цитата(SABROG @ 17.3.2009, 9:24) *
А если я возьму статическую библиотеку скомпиленную в linux и попытаюсь её прилинковать к программе в windows, будет какая-нибудь разница?
Предположим, что код в ней портабельный. Никакой привязки к API OS или сторонним библиотекам.

Форматы разные, думаю ничего не получиться.
В .a, как ты и писал выше, лежат .o, а они, по идее, уже под собираемую платформу заточены.
Хотя, если привязки никакой нет и форматы .o mingw и gcc одинаковые, все может быть. :)
SABROG Дата 17.3.2009, 9:24
 
Цитата(BRE @ 17.3.2009, 9:15) *
Цитата(SABROG @ 17.3.2009, 9:13) *
А для меня так не разрешенным остался такой вопрос. .a библиотеки отличаются чем-нибудь от linux и windows версий?

В linux .а статическая библиотека. Для динамической .a не создается, линкер сразу .so пользуется.

А если я возьму статическую библиотеку скомпиленную в linux и попытаюсь её прилинковать к программе в windows, будет какая-нибудь разница?
Предположим, что код в ней портабельный. Никакой привязки к API OS или сторонним библиотекам.
BRE Дата 17.3.2009, 9:15
 
Цитата(SABROG @ 17.3.2009, 9:13) *
А для меня так не разрешенным остался такой вопрос. .a библиотеки отличаются чем-нибудь от linux и windows версий?

В linux .а статическая библиотека. Для динамической .a не создается, линкер сразу .so пользуется.
SABROG Дата 17.3.2009, 9:13
  А для меня так не разрешенным остался такой вопрос. .a библиотеки отличаются чем-нибудь от linux и windows версий?
BRE Дата 17.3.2009, 8:17
 
Цитата(Litkevich Yuriy @ 17.3.2009, 0:14) *
т.е. в случае сборки Qt с разделяемыми библиотеками, при компиляции моей программы эти a'шки линкером присоеденяются к объектникам моей программы и потом получается exe'шник?

Да.
Если я не ошибаюсь, dll можно вообще убрать, а линкер программу все равно соберет. dll нужны будут только при исполнении программы.
Litkevich Yuriy Дата 17.3.2009, 2:23
 
Цитата(SABROG @ 17.3.2009, 3:52) *
В .pro файле можно прописать TEMPLATE = lib и собрать ...
это я знаю, я про разные варианты *.a не знал.
SABROG Дата 17.3.2009, 0:52
 
Цитата(Litkevich Yuriy @ 17.3.2009, 0:47) *
Цитата(SABROG @ 17.3.2009, 3:32) *
Из объектников (.o) получаются .a,
ну это не для случая моей программы, а для случая самой Qt. Уменя только *.o создаются в указанных мною каталогах.

В .pro файле можно прописать TEMPLATE = lib и собрать какой-нибудь класс, или группу классов. Если он завершен, т.е. ты не будешь его менять также как Qt, то можешь тупо линковать к своей программе, главное, чтобы хедер был, где описан интерфейс/определение класса. Ведь часто нет смысла пересобирать готовый модуль каждый раз вместе с программой. Это и на скорости компиляции скажется.
Litkevich Yuriy Дата 17.3.2009, 0:47
 
Цитата(SABROG @ 17.3.2009, 3:32) *
Из объектников (.o) получаются .a,
ну это не для случая моей программы, а для случая самой Qt. Уменя только *.o создаются в указанных мною каталогах.
SABROG Дата 17.3.2009, 0:32
 
Цитата(Litkevich Yuriy @ 17.3.2009, 0:14) *
Цитата(BRE @ 17.3.2009, 2:55) *
вот .а содержит код-переходник для вызова функций из dll.
т.е. в случае сборки Qt с разделяемыми библиотеками, при компиляции моей программы эти a'шки линкером присоеденяются к объектникам моей программы и потом получается exe'шник?

Из объектников (.o) получаются .a, это тоже самое, что и .lib. Линкер использует a./.lib файлы, чтобы сгенерить исполнимый файл. Оттуда он берет адреса функций, переменные, кто что куда экспортирует/импортирует. На этапе линковки .dll файлы не нужны. Если мне память не изменяет, то ld в некоторых случаях может вообще без .a файлов обходится, если есть .dll.
Litkevich Yuriy Дата 17.3.2009, 0:14
 
Цитата(BRE @ 17.3.2009, 2:55) *
вот .а содержит код-переходник для вызова функций из dll.
т.е. в случае сборки Qt с разделяемыми библиотеками, при компиляции моей программы эти a'шки линкером присоеденяются к объектникам моей программы и потом получается exe'шник?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 20.4.2024, 3:48