|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
fb user, пример статической линковки кода SQLite3 я выкладывал ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:17 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
MaratIskпри статической линковке код компилируется в исполняемый файл приложения и не требует наличия DLL эээээ.... не так. никакой код длл при статической линковке в exe не попадает, и длл все равно нужна. Основная разница между статической и динамической линковкой лишь в том, что при динамической длл грузится в любой момент работы, "по желанию", а при статической - загрузка длл производится при старте exe, и без этой длл приложение работать не будет. Всякие интерфейсные виндовые длл линкуются (дельфями в т.ч.) статически. p.s. дельфийские bpl - те же статически линкуемые длл. Всяческие драйверы к БД - ОДБЦ, БДЕ, дбЭкспресс - грузятся динамически, по мере коннекта к конкретному типу СУБД (не интерфейс, а сам драйвер). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:28 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvMaratIskпри статической линковке код компилируется в исполняемый файл приложения и не требует наличия DLL эээээ.... не так. никакой код длл при статической линковке в exe не попадает, и длл все равно нужна. Основная разница между статической и динамической линковкой лишь в том, что при динамической длл грузится в любой момент работы, "по желанию", а при статической - загрузка длл производится при старте exe, и без этой длл приложение работать не будет. Всякие интерфейсные виндовые длл линкуются (дельфями в т.ч.) статически. p.s. дельфийские bpl - те же статически линкуемые длл. Всяческие драйверы к БД - ОДБЦ, БДЕ, дбЭкспресс - грузятся динамически, по мере коннекта к конкретному типу СУБД (не интерфейс, а сам драйвер). глупости раннее и позднее связывание динамической библиотеки не имеет отношения к статической линковке ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 14:44 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
MaratIskраннее и позднее связывание динамической библиотеки не имеет отношения к статической линковкеОб этом уже мало кто помнит\знает и для простоты используют стат\дин линковку с длл вместо раннего\позднего связывания (связывание и линковка - одно и тоже, кстати :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 15:27 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
MaratIskне имеет отношения к статической линковке согласен. но я может ересь скажу - компилятор не может взять стороннюю dll, и воткнуть ее код в результирующий exe-файл. Как ресурс - можно. В дельфи, если я правильно помню, статической линковки нет, есть только раннее и позднее связывание. Либо мы тупо компилируем код прямо в exe (если этот код есть в виде pas или dcu). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 16:13 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvMaratIskне имеет отношения к статической линковке согласен. но я может ересь скажу - компилятор не может взять стороннюю dll, и воткнуть ее код в результирующий exe-файл. Как ресурс - можно. В дельфи, если я правильно помню, статической линковки нет, есть только раннее и позднее связывание. Либо мы тупо компилируем код прямо в exe (если этот код есть в виде pas или dcu). С чего это ты взял? И вправду ересь пишешь 2й раз - в этой тематике ты неправ. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 18:05 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvВ дельфи, если я правильно помню, статической линковки нет, есть только раннее и позднее связывание. Либо мы тупо компилируем код прямо в exe (если этот код есть в виде pas или dcu). Схематично, можно объяснить примерно так: Есть 2 стадии для получения бинарика: 1. Компиляция исходного кода в объектные файлы (в случае делфей - из .pas получается .dcu ) На этом этапе текст переводится в код. И создаётся справочник внешних (для файла) имён. 2. Сборка объектных файлов в выходной бинарик - линковка (в случае делфей - из кучи .dcu получается .exe | .dll | .bpl ) Весь код и данные собираются в единые секции а внешние имена заменяются на их адреса в секциях. Кстати, именно поэтому получить имя функции и стек вызова во время исполнения - нетривиальная задача - имён просто не содержится в бинарике, если нет отладочной информации - спец. секции где сохраняется соответствие имён с адресами. Для удобства кучку объектных файлов можно собрать в один - библиотеку (не помню как в делфях оно называется .dcl & .bpi ? ), и потом подключать её. Тогда линкер вытащит из неё только нужные для сборки объектники. Когда собирается (линкуется) динамическая библиотека, линкер дополнительно создаёт для каждого экспортного имени переходник, и собирает их в библиотеку. Кроме того в этой библиотеке содержится имя динамической библиотеки которое при линковке запоминается в спец. секции бинарика. Кстати, при сборки .exe -шника тоже можно указать какие-то миена как экспортные, создать подобную библиотечку и потом линковаться к ней в .dll -ках. (Тут я не знаю, есть ди у дельфей соответственный синтаксис и опции линкера). И дополнительная стадия на этапе загрузки бинарика в память: 3. При загрузке в память системный загрузчик просматривает секцию бинарика, которая содержит имена нужных динамических библиотек, загружает каждую в память (если ещё не загружена) и подставляет реальные адреса экспортных из них символов вместо переходников. Этот пункт можно проделать и полностью "вручную" (динамически) - загрузить бинарик в память, получить адреса его экспортных символов и далее их использовать. Кстати, если понять что происходит на стадиях 2 и 3, то становится понятно что такое dll hell и на что нарвался __Avenger__. В бинарике содержится только имя внешней .dll -ки, и ничего нет про версию. Поэтому если система ищет по имени, и грузит/берёт первую подходящую. Если она оказалась не более старая/новая и с другим составом экспортов - происходит ошибка загрузки. Кстати, гораздо хуже будет если состав экспортов не поменялся, а вот например порядок и/или состав параметров вызова поменялся. Тут ошибка загрузки не произойдёт но при вызове таких функций случится что попало. Хорошо ещё если сразу сегфолт. :) П. С. Ежели кому интересно, обсуждать можно в ЖЖ . :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 11:37 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Tonal, исчерпывающе, но не вполне ))) статическая линковка однозначно предполагает компиляцию исходного кода в приложение. преимущества этого очевидны - отсутствие необходимости таскать с программой кучу библиотек в виде DLL файлов с соотвествующим избавлением от DLL hell (проблемой загрузки разных версий библиотечных файлов). минусы тоже есть - необходимо наличие исходного кода или уже готовых объектных файлов, невозможность использовать новые версии библиотеки. для статики, как правило, используются библиотеки написанные на С и/или С++. но и тут есть подводные камни - в Delphi можно использовать объектные файлы полученные компилятором от Borland BCC32. FPC распознает только объектные файлы написанные на С. в обоих случаях (имею ввиду статику и динамику) требуются интерфейсные PAS файлы (аналог заголовочных файлов С/С++), транслирующие экспортируемые библиотекой функции. для FPC есть утилита H2PAS. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 13:12 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
MaratIsk, .DCU - это тоже объектные файлы. :) У продуктов Борланда свой формат объектников, через это Дельфя понимает только объектники полученные от борландёвых же компиляторов. Так же как и Билдер понимает .dcu-шки от Делфей, но не поймёт что делать с объектниками от FPC или M$ . А "статические библиотеки" - это не что иное как некоторое количество объектных файлов собранных в один для удобства. Загляни в директорию bin - там есть утилита для работы со статическими библиотеками. Можно создать либку, долбавить/удалить/заменить объектник в ней. Таким образом, ехе-шка/dll-ка/bpl-ка получается статическим связыванием (линковкой) объектных файлов (возможно из состава библиотеки). Кстати, bpl-ка с точки зрения системы ничем не отличается от dll-ки Динамическое связывание происходит в 2 приёма: 1. ехе-шка/dll-ка статически связывается (линкуется) с библиотекой переходников. Тут можно заметить, что борландовский линкер умеет автоматом создавать такие библиотеки, если ему подсунуть dll-ку вместо lib-ки. 2. При загрузке в память загрузчик операционки находит требуемые dll-ки, загружает их в память, находит нужные имена или ординалы и подставляет их адреса вместо переходников. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 08:59 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Tonal, неверное утверждение А "статические библиотеки" - это не что иное как некоторое количество объектных файлов собранных в один для удобства. их иногда десятки и собрать в один (особенно, из с-шных исходников) весьма трудоемко и еще раз повторю - статика всегда предполагает компиляцию функциональности в результирующий исполняемый файл ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 09:20 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
немного по теме ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 11:26 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Siemargl, давай я тебе дам голую dll, а ты ее код вкомпилируешь в exe. Вкомпилировать в exe всякие pas, dcu, obj и проч - и ёж сможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:02 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvSiemargl, давай я тебе дам голую dll, а ты ее код вкомпилируешь в exe. Вкомпилировать в exe всякие pas, dcu, obj и проч - и ёж сможет. Давай я тебе скажу как это сделать. DLL - Это просто кусок кода функций (но с пофикшенными релокейшнами). Если есть map-файл, грузи его в память и вызывай по смещению. https://en.wikipedia.org/wiki/Relocation_(computing) Например с такой функцией справляются всякие упаковщики и защитники программ. А вот часть dll влинковать в общем случае не выйдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:39 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Слинковать можно например с помощью скриптов гнусного линкера ld. Т.е в память тебе его система загрузит стандартной функцией. Но вот связывание придется сделать ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:44 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvSiemargl, давай я тебе дам голую dll, а ты ее код вкомпилируешь в exe. Вкомпилировать в exe всякие pas, dcu, obj и проч - и ёж сможет. совсем невнимательно читаешь ((( повторяю - для статической линковки нужны либо исходники, либо уже скомпилированные объектные файлы. ДЛЛ - для динамического подключения, не считая хакерских штучек типа помещения в ресурсы и использования в памяти кстати, по поводу ежа ))) даже готовые OBJ файлы могут не линковаться в delphi-exe статически из-за разности форматов - COFF и ELF ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:56 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
SiemarglЕсли есть map-файл в дистрибутиве firebird map-файлов нет. я бы предложил завязать. А то конкретный вопрос про 18902793 превратился в вопросы терминологии, и прочего (включая LD). Можно fbclient.dll статически слинковать с дельфевым exe? Теоретически - да, практически - нет. Можно fbclient.dll подключать ранней или поздней загрузкой? Да, сколько угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:59 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
kdvкомпилятор не может взять стороннюю dll, и воткнуть ее код в результирующий exe-файл это верно kdvВ дельфи, если я правильно помню, статической линковки нет а это - нет. Просто влинковываюся внутрь, разумеется, не DLL, а OBJ ( и по слухам vc++ x64 lib ) например OBJ-и того же SQLite ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 14:17 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Ariochа это - нет. Просто влинковываюся внутрь, разумеется, не DLL, а OBJ статическая линковка для меня настолько естественна, что про dcu/obj я и не говорю. имел в виду "линковку" dll в exe, без obj, map, вообще без ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 14:22 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Смыслы я знал давно, а термины немного попутал. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 14:51 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Чисто теоретически предположу, что для FB developers было б не очень сложно выкладывать fbclient также в формате набора obj-файлов м файлом-заголовком. Если бы это было действительно кому-то реально нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 16:36 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
AriochЧисто теоретически предположу, что для FB developers было б не очень сложно выкладывать fbclient также в формате набора obj-файлов м файлом-заголовком. Если бы это было действительно кому-то реально нужно. А толку? Если кто линкует FB с прогой на си, у него и так есть компилятор, и собрать либу не составит труда. А с другим языком хрен эти obj-и подружишь. Я как-то тоже возмечтал о самодостаточной проге с имплантированным fbclient. Собрал его, перегнал obj в формат Борланда - и столкнулся с проблемой неразрешимых зависимостей от этой кучи obj, не считая более мистических ошибок. Забил. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 14:51 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Релиз надо делать сегодня - уж очень символичный день 12 апреля! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 09:34 |
|
Когда выйдет релиз FB3?
|
|||
---|---|---|---|
#18+
Ritter, > очень символичный день 12 апреля! в последний раз что ли? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:44 |
|
|
start [/forum/topic.php?fid=40&msg=39189096&tid=1561979]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 455ms |
0 / 0 |