LINUX.ORG.RU

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

 , ,


0

1

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

★★★★

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

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

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

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

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

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

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

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

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

Harald ★★★★★ ()

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

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

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

XMs ★★★★★ ()
Ответ на: комментарий от 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 ()
Ответ на: комментарий от 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 ★★★★★ ()

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

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

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

o- ()