LINUX.ORG.RU

Собрать все dll в один бинарь

 , ,


0

1

Делаю программу на libavcodec, она цепляет avcodec.dll и прочие. Я хочу один бинарь, так как не удобно таскать dll всюду. Можно ли такое? Или нужно добавлять в проект весь исходный код ffmpeg и сомпилировать?

★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Это ведь обычные библиотеки, ничто не помешает свалить эту в один файл. Надо просто написать такой Makefile, где в одну so-шку кладется всё, а не по разным. Подозреваю там всё сложнее чем в мелких проектах, сотни файлов и непонятные костыли, но быть может в Makefile верхнего уровня всё проще

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Я хочу один бинарь,

То есть хочешь не бинарь + dll распростанять, а бинарь + исходники.

Ты молодец, Столман одобряет.

fsb4000 ★★★★★
()

Я хочу один бинарь

Это называется статической сборкой. Если в библиотеках нет одинаковых функций, всё пройдёт как по маслу. Говоря проще, тебе надо компилировать прогу с архивами объектников, а не с dll-ками.

anonymous
()

Какие такие в заднепроходное отверстие dll?

init_6 ★★★★★
()

Можно ли такое?

Да, можно, это называется статическая линковка. Как это делается в винде тебе лучше знать, нам-то, линуксоидам, откуда это уметь.

gremlin_the_red ★★★★★
()

так как не удобно таскать dll всюду

Зачем тебе их таскать? Они должны ставиться из системного пакетного менеджера.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Зачем тебе их таскать?

Dll? ТС явным образом про offtop шпарит. На лине динамические либы so-шками зовут.

anonymous
()

Распаковывайся при запуске в %Temp%, и запускайся оттуда с dll.

AdonisSexyBoy
()
Ответ на: комментарий от gremlin_the_red

Класс! Главное что можно

gobot ★★★★
() автор топика
Ответ на: комментарий от fsb4000

Хочу просто один бинарь, чтоб скачал и запустил, без установщика. Максимально проще надо

gobot ★★★★
() автор топика
Ответ на: комментарий от Harald

Он и лицензионные отчисления за реализации кодеков исправно платит.

anonymous
()
Ответ на: комментарий от Harald

а ты условия LGPL соблюдаешь?

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

fsb4000 ★★★★★
()

А код ты свой открывать собираешься в соответствии с LGPL и GPL, под которыми лицензирован ffmpeg?

XMs ★★★★★
()
Ответ на: комментарий от gobot

Чтобы не нарушать условия, нужно либо делиться исходниками своей программы, либо предоставлять её объектные файлы, чтобы пользователь имел свободу собирать с другой версией ffmpeg. Если ты включаешь в сборку h264 кодек и некоторые другие компоненты, тогда FFMpeg уже под лицензией GPL и нужно делиться исходниками в любом случае.

Harald ★★★★★
()

Можно при сборке ffmpeg включить опцию сборки статических библиотек и потом линковаться с ними.

./configure --enable-static

Harald ★★★★★
()
Последнее исправление: Harald (всего исправлений: 1)

А можно ли собрать .so так, чтобы эта .so не была слинкована с системными либами? Типа как статическая линковка, но разбитая на две части: исполняемый файл типа “.exe” и нужная для работы «.so», и больше никаких зависимостей

menangen ★★★★★
()
Ответ на: комментарий от gobot

Тогда зачем ему библиотеки? Если я правильно понял, у тебя он скриптом подрабатывает, т. е. дёргает внешнее приложение. Как это приложение собрано — дело десятое. А вот если ты используешь ffmpeg API и линкуешься с ним, то открывать надо

XMs ★★★★★
()

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

Harald ★★★★★
()
Ответ на: комментарий от menangen

Я не настоящий сварщик, поэтому могу где-то сказать глупость, но по мне нет никаких проблем. Тебе нужны будут .a файлы всех используемых библиотек, включая libc, которые ты статически линкуешь в один .so, с которым уже динамически линкуешь свой .elf

gremlin_the_red ★★★★★
()
Ответ на: комментарий от Harald

Скачал самый маленький с гитхаба

$ unzip -l ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3.zip | grep \.dll$
   563200  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/swresample-3.dll
  1054208  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/avutil-56.dll
  1416192  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/avdevice-58.dll
 10961408  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/avfilter-7.dll
  9358336  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/avformat-58.dll
   561152  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/swscale-5.dll
 37186560  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/bin/avcodec-58.dll
anonymous
()

Можно, но ffmpeg по умолчанию - GPL. Может с флагом LGPL собрать, но без libx264 и прочих ништяков.

RazrFalcon ★★★★★
()
Ответ на: комментарий от Harald

ладно, статических библиотек нет :)

Кто ж спорит :)

 unzip -l ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3.zip | grep \.lib$
    55002  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/avfilter.lib
   414514  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/avutil.lib
   136558  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/avformat.lib
    18842  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/swresample.lib
    15874  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/avdevice.lib
   186320  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/avcodec.lib
    27204  11-23-2020 15:33   ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3/lib/swscale.lib
anonymous
()
Ответ на: комментарий от anonymous

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

Harald ★★★★★
()
Ответ на: комментарий от Harald

Я нашёл тред на SO, вантузоидам самим собирать надо статичную версию либ. Это в лялексе достаточно поставить libffmpeg-static-dev.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от Harald

у них, говорят, теперь есть WSL2, где жить можно почти так же хорошо, как в нормальных системах. И 40 лет не прошло.

gremlin_the_red ★★★★★
()

Если у тебя CMake, то через vcpkg можно собрать легко статический бинарник. Сначала все зависимомти компилишь как -static, а потом патчишь CMakeFiles чтобы оно умело линковать статически.

Я за часа 2 извращений смог собрать статически проект с sdl2, ffmpeg и полновесным qt5. Правда билд превратился в ужасное уродство, но оно даже работало.

Или можно с линукса через MXE собрать, но там статического ffmpeg может и нет вообще.

o-
()
Ответ на: комментарий от Harald

Да не помню где брал. Это же не принципиально. Я и сам могу конечно собрать их. Тут вопрос другом, как все это в один бинарь запихать

gobot ★★★★
() автор топика
Ответ на: комментарий от anonymous

Если ТС-у достаточно статической линковки с ffmpeg - делал 5 лет назад, работало вроде. А может мне приглючилось

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от i-rinat

Вроде то, что нужно. Но он платный, есть что нибудь подобное бесплатное?

gobot ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.