Re[4]: можно ли из dll сделать
От: удусекшл  
Дата: 07.02.20 12:05
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

У>>Ну как же нет, когда всё, что нужно, там есть?


ЕМ>Где там границы функций и модулей?


А они точно нужны? Без них никак?


У>>Теоретически можно разобрать ручками dll, покурить формат obj файлов MSVS и собрать всё в OBJ.


ЕМ>И получится линкуемый бинарник, но никак не библиотека.


Библиотека содержит объектники. Может содержать и один. Объектник содержит секции. Если ты не указал в настройках помещать каждую функцию в отдельную секцию, то код каждой единицы трансляции будет лежать в одной секции, которая при линковке будет подсосана целиком.

Вопрос был как слинковать DLL статически, а назовешь ты это библиотекой или линкуемым бинарником — какая разница-то?
Re[5]: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.02.20 12:20
Оценка: +2
Здравствуйте, удусекшл, Вы писали:

ЕМ>>Где там границы функций и модулей?

У>А они точно нужны? Без них никак?

Чтобы тупо прикрутить DLL внутрь EXE — не нужны, только зачем это может быть нужно?

У>Библиотека содержит объектники. Может содержать и один. Объектник содержит секции. Если ты не указал в настройках помещать каждую функцию в отдельную секцию, то код каждой единицы трансляции будет лежать в одной секции, которая при линковке будет подсосана целиком.


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

У>Вопрос был как слинковать DLL статически


Вопрос был, как переделать DLL в статическую библиотеку. Поскольку ТС традиционно сверхлаконичен, я предположил, что ему нужна классическая библиотека (контейнер для функций и модулей), а не формально линкуемый неразборный кусок.
Re[6]: можно ли из dll сделать
От: удусекшл  
Дата: 07.02.20 12:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>>>Где там границы функций и модулей?

У>>А они точно нужны? Без них никак?

ЕМ>Чтобы тупо прикрутить DLL внутрь EXE — не нужны, только зачем это может быть нужно?


Чтобы тупо прикрутить DLL к EXE


ЕМ>Так делаются только самые тупые библиотеки, единственной задачей которых является столь же тупое прикрепление к конечному бинарнику. Правильная библиотека делается так, чтобы извлекать оттуда только необходимые зависимости, и ничего лишнего.


Тупая не тупая, но всё равно — библиотека


У>>Вопрос был как слинковать DLL статически


ЕМ>Вопрос был, как переделать DLL в статическую библиотеку.


Ок, согласен


ЕМ>Поскольку ТС традиционно сверхлаконичен, я предположил, что ему нужна классическая библиотека (контейнер для функций и модулей), а не формально линкуемый неразборный кусок.


Только зачем ему могло бы это понадобится?
Re[7]: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.02.20 13:24
Оценка:
Здравствуйте, удусекшл, Вы писали:

ЕМ>>Чтобы тупо прикрутить DLL внутрь EXE — не нужны, только зачем это может быть нужно?


У>Чтобы тупо прикрутить DLL к EXE


Ну вот я и не понял, для чего это могло бы понадобиться.

У>Тупая не тупая, но всё равно — библиотека


Как обычная библиотека с книгами, где на просьбу выдать один экземпляр предлагают забрать весь стеллаж.
Re[5]: можно ли из dll сделать
От: reversecode google
Дата: 07.02.20 13:29
Оценка:
почему вы думаете что что то изменится ?

устроились в амазон ихний елементаль говнокодить ?
Re[4]: можно ли из dll сделать
От: flаt  
Дата: 07.02.20 15:57
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Честно, не понял проблемы. Чем линковка "одним куском" хуже? И что такое "полноценная библиотека"?

Вот есть у нас заголовочный файл с API, функции которого можно вызывать из своего кода. В случае статической библиотеки они будут публичными в obj-файлах, в случае динамической — в её экспорте. В обоих случаях мы используем то, что нам предоставили.
Re[5]: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.02.20 17:07
Оценка: +1
Здравствуйте, flаt, Вы писали:

F>Чем линковка "одним куском" хуже?


Тем, что библиотека используется в роли единичного объектного файла.

F>И что такое "полноценная библиотека"?


"Библиотека" — это "хранилище книг". Множества книг, из которых можно выбрать нужное подмножество, а не одного гигантского фолианта из сотен тысяч страниц.

F>Вот есть у нас заголовочный файл с API, функции которого можно вызывать из своего кода. В случае статической библиотеки они будут публичными в obj-файлах, в случае динамической — в её экспорте. В обоих случаях мы используем то, что нам предоставили.


Если API состоит, грубо говоря, из сотни функций, а программа использует двадцать, то при линковке с грамотно сделанной статической библиотекой (ну, или при использовании современных расширений вроде packaged functions), будут прилинкованы только эти два десятка. DLL будет содержать всю сотню, но ее одновременно могут использовать несколько приложений. А при линковке "одним куском" к каждому приложению будет прицеплена вся сотня, и восемь десятков будет там лежать мертвым, бесполезным грузом.
Re[5]: можно ли из dll сделать
От: cserg  
Дата: 07.02.20 17:48
Оценка:
Здравствуйте, удусекшл, Вы писали:

ЕМ>>Где там границы функций и модулей?

У>А они точно нужны? Без них никак?
Точно нужны, но и этого недостаточно. Линкер может объединить в dll хвосты нескольких процедур/функций в один. Код процедуры может не составлять непрерывный кусок секции и пр.
Re[8]: можно ли из dll сделать
От: XuMuK Россия  
Дата: 10.02.20 14:18
Оценка: 8 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Ну вот я и не понял, для чего это могло бы понадобиться.


Например чтобы отдать заказчику один исполняемый файл, а не архив из EXE и кучи DLL.
Re[6]: можно ли из dll сделать
От: flаt  
Дата: 10.02.20 14:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>Если API состоит, грубо говоря, из сотни функций, а программа использует двадцать, то при линковке с грамотно сделанной статической библиотекой (ну, или при использовании современных расширений вроде packaged functions), будут прилинкованы только эти два десятка. DLL будет содержать всю сотню, но ее одновременно могут использовать несколько приложений. А при линковке "одним куском" к каждому приложению будет прицеплена вся сотня, и восемь десятков будет там лежать мертвым, бесполезным грузом.


Это всё верно, вот только отвечал я на другое (черезчур категоричное) заявление:

Нельзя. DLL — это, как и EXE, конечный исполняемый файл, в нем нет имен, модулей, функций и прочих принадлежностей OBJ/LIB.


Так что, ответ всё-таки будет "можно"
Re: можно ли из dll сделать
От: Bjorn Skalpe Земля  
Дата: 26.02.20 20:05
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>статическую библиотеку

S>или из файлов .o собранных cygwin файлы lib коректно линкуемые к проекту на VS

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

Еще тело dll можно упаковать как данные, которые грузит в память статическая либа. Только какой в этом смысл?

Только цель какая? Может тот кто поставил задание хочет другое? Например чтобы CRT в dll линковался статически, а не использовался динамически? Так это опять опция сборки dll.
Отредактировано 26.02.2020 20:06 Bjorn Skalpe . Предыдущая версия . Еще …
Отредактировано 26.02.2020 20:05 Bjorn Skalpe . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.