Re[4]: можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 06.02.20 16:22
Оценка: :)))
Здравствуйте, reversecode, Вы писали:



R>и что это настолько сложно?

R>после таких ваших вопросов
R>ваш експириенс понизился до уровня джуна после несколько месячных курсов по программированию

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

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

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

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

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


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

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


Вопрос был, как переделать DLL в статическую библиотеку. Поскольку ТС традиционно сверхлаконичен, я предположил, что ему нужна классическая библиотека (контейнер для функций и модулей), а не формально линкуемый неразборный кусок.
Re: можно ли из dll сделать
От: Erop Россия  
Дата: 06.02.20 07:56
Оценка: 8 (1)
Здравствуйте, sergey2b, Вы писали:

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

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

Оттуда будут потроха видны наружу, с ODR могут быть проблемы.
Особенно если несколько кломпиляторов и рантаймов в деле...

А зачем тебе это всё? Можно как-то по-простому хаккернуть? Ну, там, выгружать dll из ресурсов куда-нибудь во временный, автоудаляемый файл и грузить оттуда?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 06.02.20 11:05
Оценка: 8 (1)
Здравствуйте, sergey2b, Вы писали:

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


Нельзя. DLL — это, как и EXE, конечный исполняемый файл, в нем нет имен, модулей, функций и прочих принадлежностей OBJ/LIB.
Re[3]: можно ли из dll сделать
От: SaZ  
Дата: 06.02.20 13:39
Оценка: 8 (1)
Здравствуйте, sergey2b, Вы писали:

S>но попросили сделать статическую линковку с проектом на vs2015


Вас LGPL лицензия не смущает для статической линковки?
Re[8]: можно ли из dll сделать
От: XuMuK Россия  
Дата: 10.02.20 14:18
Оценка: 8 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

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


Например чтобы отдать заказчику один исполняемый файл, а не архив из EXE и кучи DLL.
Re[2]: можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 06.02.20 13:11
Оценка: 6 (1)
Здравствуйте, Erop, Вы писали:

E>А зачем тебе это всё? Можно как-то по-простому хаккернуть? Ну, там, выгружать dll из ресурсов куда-нибудь во временный, автоудаляемый файл и грузить оттуда?



я умею собирать под win вот эту библиотеку в виде dll
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/

но попросили сделать статическую линковку с проектом на vs2015
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 будет содержать всю сотню, но ее одновременно могут использовать несколько приложений. А при линковке "одним куском" к каждому приложению будет прицеплена вся сотня, и восемь десятков будет там лежать мертвым, бесполезным грузом.
можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 05.02.20 21:05
Оценка:
статическую библиотеку
или из файлов .o собранных cygwin файлы lib коректно линкуемые к проекту на VS
Re[2]: можно ли из dll сделать
От: IID Россия  
Дата: 06.02.20 08:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ну, там, выгружать dll из ресурсов куда-нибудь во временный, автоудаляемый файл и грузить оттуда?


Автоудаляемые файлы (DELETE_ON_CLOSE) не маппятся.
kalsarikännit
Re[3]: можно ли из dll сделать
От: Erop Россия  
Дата: 06.02.20 08:50
Оценка:
Здравствуйте, IID, Вы писали:

IID>Автоудаляемые файлы (DELETE_ON_CLOSE) не маппятся.

Ну пусть в своп копирует, флажок жен был вроде?
Но, на самом деле конкретно DELETE_ON_CLOSE неудобно. Лучше в список на удаление после перезагрузки добавть, например.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: можно ли из dll сделать
От: flаt  
Дата: 06.02.20 12:52
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:



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


Можно.Но cygwin'овскую — нельзя.
Re[3]: можно ли из dll сделать
От: reversecode google
Дата: 06.02.20 13:24
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>но попросили сделать статическую линковку с проектом на vs2015


и что это настолько сложно?
после таких ваших вопросов
ваш експириенс понизился до уровня джуна после несколько месячных курсов по программированию
Re[2]: можно ли из dll сделать
От: удусекшл  
Дата: 06.02.20 13:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

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


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


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

Теоретически можно разобрать ручками dll, покурить формат obj файлов MSVS и собрать всё в OBJ. Но таких инструментов готовых я не видел
Re[3]: можно ли из dll сделать
От: Videoman Россия https://hts.tv/
Дата: 06.02.20 14:04
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>я умею собирать под win вот эту библиотеку в виде dll

S>https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/

S>но попросили сделать статическую линковку с проектом на vs2015


Не хочу вас расстраивать, но во первых, ffMPEG под LGPL, а во вторых, avcodec.dll статически слинкована с avutil.dll и swresample.dll, т.е. она в рантайме без этих dll работать не будет. Поэтому, вам и их придется научится собирать.
Re[4]: можно ли из dll сделать
От: B0FEE664  
Дата: 06.02.20 14:41
Оценка:
Здравствуйте, SaZ, Вы писали:

S>>но попросили сделать статическую линковку с проектом на vs2015

SaZ>Вас LGPL лицензия не смущает для статической линковки?

Может они готовы предоставлять свои исходники, тогда какие проблемы?
И каждый день — без права на ошибку...
Re[4]: можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 06.02.20 16:20
Оценка:
Здравствуйте, Videoman, Вы писали:


V>Не хочу вас расстраивать, но во первых, ffMPEG под LGPL, а во вторых, avcodec.dll статически слинкована с avutil.dll и swresample.dll, т.е. она в рантайме без этих dll работать не будет. Поэтому, вам и их придется научится собирать.



с лицензие пусть разбираеться начальство, я их предупрежу

avcodec.a avutil.a swresample.a и оставшиеся 3-4 библиотеки
mingw могут быть слинкованы статически вместе
Re[2]: можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 06.02.20 16:50
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, sergey2b, Вы писали:


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


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


именна функций и думюю их смещение нам известны (в конце концов я собираю эти dll и у меня есть def файлы)
dll на чистом Си те проблем с именнами не будет
rtl не смещиваеться тк он свой у dll и программы
Re[5]: можно ли из dll сделать
От: Videoman Россия https://hts.tv/
Дата: 06.02.20 18:57
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>avcodec.a avutil.a swresample.a и оставшиеся 3-4 библиотеки

S>mingw могут быть слинкованы статически вместе

Это не оно?
Re[6]: можно ли из dll сделать
От: sergey2b ЮАР  
Дата: 06.02.20 19:17
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, sergey2b, Вы писали:


S>>avcodec.a avutil.a swresample.a и оставшиеся 3-4 библиотеки

S>>mingw могут быть слинкованы статически вместе

V>Это не оно?





Нет это делает lib для простого доступа к функциям all
Re[2]: можно ли из dll сделать
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.02.20 19:34
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

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


Имена экспортируемых и импортируемых символов в нем есть. Релокации ему вроде как не нужны. Так что теоретически можно. А практически вряд ли имеет смысл.
Re[3]: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.02.20 08:33
Оценка:
Здравствуйте, flаt, Вы писали:

F>Можно.


Подобные тулзы могут сделать из DLL только "статически линкуемую" DLL, не более того. То есть, линковаться-то она будет, но только одним куском (максимум — секциями, но это уже ненадежно). Полноценной библиотеки из нее не сделать, если нет PDB.
Re[3]: можно ли из dll сделать
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.02.20 08:35
Оценка:
Здравствуйте, удусекшл, Вы писали:

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


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

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


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

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


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


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


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


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


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

Вопрос был как слинковать 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 сделать
От: cserg  
Дата: 07.02.20 17:48
Оценка:
Здравствуйте, удусекшл, Вы писали:

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

У>А они точно нужны? Без них никак?
Точно нужны, но и этого недостаточно. Линкер может объединить в 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...
Пока на собственное сообщение не было ответов, его можно удалить.