В чем разница между статическими библиотеками ffmpeg из ubuntu и моими, которые я скомпилировал?

Я попробовал ffmpeg из репозиториев Ubuntu, и связать их было так же просто, как и просто -lavcodec -lavuitl .... Затем я скомпилировал мой с этими конфигурациями:

    ./configure \
    --prefix=${BUILD_DIR}/desktop/x86_64 \
    --extra-cflags="-I$HOME/ffmpeg_build/include" \
    --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
    --enable-shared \
    --arch=x86_64 \
    --enable-vaapi \
    --disable-vaapi \
    --enable-opencl \
    --disable-debug \
    --enable-nvenc \
    --enable-cuda \
    --enable-cuvid \
    --enable-libvpx \
    --enable-libdrm \
    --enable-gpl \
    --enable-runtime-cpudetect \
    --enable-libfdk-aac \
    --enable-libx264 \
    --enable-openssl \
    --enable-pic \
    --extra-libs="-lpthread -lm -lz -ldl" \
    --enable-nonfree 

И он генерировал статические библиотеки, точно такие же, как в репозиториях Ubuntu. Тем не менее, я не могу просто связать их с -lavcodec -lavuitl ..., потому что я получаю много неопределенных ссылок, например

../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_frame':
libfdk-aacdec.c:(.text+0x4f): undefined reference to `aacDecoder_Fill'
libfdk-aacdec.c:(.text+0x6d): undefined reference to `aacDecoder_DecodeFrame'
libfdk-aacdec.c:(.text+0x8d): undefined reference to `aacDecoder_GetStreamInfo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_close':
libfdk-aacdec.c:(.text.unlikely+0xf): undefined reference to `aacDecoder_Close'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o): In function `fdk_aac_decode_init':
libfdk-aacdec.c:(.text.unlikely+0x45): undefined reference to `aacDecoder_Open'
libfdk-aacdec.c:(.text.unlikely+0x82): undefined reference to `aacDecoder_ConfigRaw'
libfdk-aacdec.c:(.text.unlikely+0xb7): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x129): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x187): undefined reference to `aacDecoder_AncDataInit'
libfdk-aacdec.c:(.text.unlikely+0x1ac): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x1d1): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x1f2): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x213): undefined reference to `aacDecoder_SetParam'
libfdk-aacdec.c:(.text.unlikely+0x22f): undefined reference to `aacDecoder_SetParam'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacdec.o):libfdk-aacdec.c:(.text.unlikely+0x250): more undefined references to `aacDecoder_SetParam' follow
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_close':
libfdk-aacenc.c:(.text+0xf9): undefined reference to `aacEncClose'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_frame':
libfdk-aacenc.c:(.text+0x2c1): undefined reference to `aacEncEncode'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_init':
libfdk-aacenc.c:(.text.unlikely+0x3c): undefined reference to `aacEncOpen'
libfdk-aacenc.c:(.text.unlikely+0x7c): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0xb8): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0xfa): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0x180): undefined reference to `aacEncoder_SetParam'
libfdk-aacenc.c:(.text.unlikely+0x25d): undefined reference to `aacEncoder_SetParam'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o):libfdk-aacenc.c:(.text.unlikely+0x28d): more undefined references to `aacEncoder_SetParam' follow
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libfdk-aacenc.o): In function `aac_encode_init':
libfdk-aacenc.c:(.text.unlikely+0x567): undefined reference to `aacEncEncode'
libfdk-aacenc.c:(.text.unlikely+0x5a1): undefined reference to `aacEncInfo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_decode':
libvpxdec.c:(.text+0x58): undefined reference to `vpx_codec_decode'
libvpxdec.c:(.text+0xa2): undefined reference to `vpx_codec_get_frame'
libvpxdec.c:(.text+0x10c): undefined reference to `vpx_codec_error'
libvpxdec.c:(.text+0x117): undefined reference to `vpx_codec_error_detail'
libvpxdec.c:(.text+0x19e): undefined reference to `vpx_codec_decode'
libvpxdec.c:(.text+0x1ae): undefined reference to `vpx_codec_error'
libvpxdec.c:(.text+0x1ca): undefined reference to `vpx_codec_get_frame'
libvpxdec.c:(.text+0x560): undefined reference to `vpx_codec_vp9_dx_algo'
libvpxdec.c:(.text+0x58f): undefined reference to `vpx_codec_vp8_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_free':
libvpxdec.c:(.text.unlikely+0x9): undefined reference to `vpx_codec_destroy'
libvpxdec.c:(.text.unlikely+0x18): undefined reference to `vpx_codec_destroy'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vpx_init':
libvpxdec.c:(.text.unlikely+0x87): undefined reference to `vpx_codec_version_str'
libvpxdec.c:(.text.unlikely+0xa5): undefined reference to `vpx_codec_build_config'
libvpxdec.c:(.text.unlikely+0xdf): undefined reference to `vpx_codec_dec_init_ver'
libvpxdec.c:(.text.unlikely+0xed): undefined reference to `vpx_codec_error'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vp8_init':
libvpxdec.c:(.text.unlikely+0x134): undefined reference to `vpx_codec_vp8_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxdec.o): In function `vp9_init':
libvpxdec.c:(.text.unlikely+0x142): undefined reference to `vpx_codec_vp9_dx_algo'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_encode':
libvpxenc.c:(.text+0xda): undefined reference to `vpx_codec_encode'
libvpxenc.c:(.text+0x2b3): undefined reference to `vpx_codec_encode'
libvpxenc.c:(.text+0x33a): undefined reference to `vpx_codec_get_cx_data'
libvpxenc.c:(.text+0x3cd): undefined reference to `vpx_codec_get_cx_data'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `log_encoder_error':
libvpxenc.c:(.text.unlikely+0x351): undefined reference to `vpx_codec_error'
libvpxenc.c:(.text.unlikely+0x35c): undefined reference to `vpx_codec_error_detail'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `codecctl_int':
libvpxenc.c:(.text.unlikely+0x43a): undefined reference to `vpx_codec_control_'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_init':
libvpxenc.c:(.text.unlikely+0x4fb): undefined reference to `vpx_codec_get_caps'
libvpxenc.c:(.text.unlikely+0x503): undefined reference to `vpx_codec_version_str'
libvpxenc.c:(.text.unlikely+0x521): undefined reference to `vpx_codec_build_config'
libvpxenc.c:(.text.unlikely+0x563): undefined reference to `vpx_codec_enc_config_default'
libvpxenc.c:(.text.unlikely+0x573): undefined reference to `vpx_codec_err_to_string'
libvpxenc.c:(.text.unlikely+0xc2c): undefined reference to `vpx_codec_enc_init_ver'
libvpxenc.c:(.text.unlikely+0xc86): undefined reference to `vpx_codec_enc_init_ver'
libvpxenc.c:(.text.unlikely+0xffb): undefined reference to `vpx_img_wrap'
libvpxenc.c:(.text.unlikely+0x1040): undefined reference to `vpx_img_wrap'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vp8_init':
libvpxenc.c:(.text.unlikely+0x10be): undefined reference to `vpx_codec_vp8_cx'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vp9_init':
libvpxenc.c:(.text.unlikely+0x10d3): undefined reference to `vpx_codec_vp9_cx'
../../../deps/ffmpeg/build/desktop/x86_64/lib/libavcodec.a(libvpxenc.o): In function `vpx_free':
...

Как это возможно для Ubuntu не полагаться на x264, libfdk-aacdec, libvpxdec, etc, но когда я использую свою скомпилированную библиотеки я должен их предоставить?

2
задан 30 August 2019 в 05:04

1 ответ

Новейший ffmpeg (7:4.1.3-0ubuntu1) для Ubuntu (динго дискотеки) доступен от нижней части той веб-страницы. Ubuntu использует процесс сборки Debian для ffmpeg.

Для создания из источников точно, тот же путь как Debian или Ubuntu делает необходимо использовать "debmake" и "debuild". Поскольку подробная документация видит “Руководство для Специалистов по обслуживанию Debian” (2019-03-26) учебное руководство.

Команда "debmake" не "делает" из источника, она изменяет источник. Это - команда "debuild", которая делает создание (но не прямым использованием "делают", вместо этого "dpkg-buildpackage" используется).

Обычный способ создать из источников:

$ tar -xzmf debhello-0.0.tar.gz
$ cd debhello-0.0
$ make
$ make install

Способ Debian создать из источников:

$ tar -xzmf debhello-0.0.tar.gz
$ cd debhello-0.0
$ debmake
  ... manual customization
$ debuild
  ...

Вы можете погрузка источник и создавать использование зависимостей:

sudo apt-get source ffmpeg
sudo apt-get build-dep ffmpeg

Посмотрите, что Кв. Ubuntu - получает справку для получения дополнительной информации об использовании команды.

Если бы Вы хотите, чтобы Ваша получающаяся сборка была подобна тому, что Вы получили бы от установки пакета, используют "debmake" и затем изменяют файлы в каталоге. После создания модификаций (которые ничего не повреждают) вводят "debuild" для создания подобного исполняемого файла (с добавленными или удаленными функциями). Усовершенствованные примеры этого взламывания также доступны, видят руководство для специалистов по обслуживанию (3-я ссылка от верхней части этого ответа).

Попробуйте простой пример сначала (не изменяя его), если Вы не чувствуете себя довольными вышеупомянутыми инструкциями. См. также Учебное руководство по Сборке Debian Wiki.

Существует также объяснение Debian на нашем сайте SuperUser: Как установить FFmpeg на Debian?

1
ответ дан 2 December 2019 в 04:36

Другие вопросы по тегам:

Похожие вопросы: