воскресенье, 17 марта 2013
Задача:Установить новую версию ffmpeg отдельно от системной, для избежания замены библиотек и хедеров. Так же собрать mplayer2 с использованием разделяемых библиотек от новой версии.
Условия:По возможности не изменять системные настройки ld.so.conf, сделать всё с помощью компилятора и линкера.
Решение:читать дальшеСобрать нужную версию ffmpeg с подобными параметрами:
#!/bin/bash
SUFFIX=-mpenc
PREFIX=/opt/ffmpeg$SUFFIX
FFLIBDIR=$PREFIX/lib
export LD_RUN_PATH=$FFLIBDIR
./configure --prefix=$PREFIX \
--disable-static \
--enable-shared \
--enable-gpl \
--enable-version3 \
..............cut................
--build-suffix=$SUFFIX \
--extra-ldflags="-L$FFLIBDIR -Wl,-rpath,$FFLIBDIR"
В очередной сборке суффикс начал добавляться к названиям файлов pkgconfig (*.pc), это мешает mplayer находить ffmpeg во время конфигурации. Посему если такое произошло, можно создать на них символьные ссылки без суффикса простым скриптом (предварительно перейти в каталог с этими файлами):
for i in * ; do sudo ln -s $i ${i%%-xxxxx*}.pc ; done
Где -xxxxx — добавленный суффикс.
Собрать нужную версию mplayer2 с подобными параметрами:
#!/bin/bash
FFSUFFIX=-mpenc
FFPREFFIX=/opt/ffmpeg$FFSUFFIX
FFLIBDIR=$FFPREFFIX/lib
export PKG_CONFIG_PATH=$FFLIBDIR/pkgconfig
export LD_RUN_PATH=$FFLIBDIR
./configure --prefix=/usr \
--enable-freetype \
--disable-vdpau \
--disable-libdvdcss-internal \
--disable-dvdread-internal \
--extra-cflags="-I$FFPREFFIX/include -g0 -s" \
--extra-ldflags="-L$FFLIBDIR -Wl,-rpath,$FFLIBDIR"
Пояснения:
Параметр --prefix= указывает, что установка будет производиться в /opt/ffmpeg-mpenc
export LD_RUN_PATH=$FFLIBDIR — указывает где линковщику искать беблиотеки при связывании. Скорее всего не нужен, но проверять нет желания.
export PKG_CONFIG_PATH=$FFLIBDIR/pkgconfig — указывает pkg-config искать пакеты для библиотек сначала по указанному пути.
--build-suffix — добавляет суффикс к именам готовых бублиотек после компиляции, чтобы с такими же именами не нашлись в стандартных путях.
--extra-cflags="-I$FFPREFFIX/include" — указывает компилятору путь для поиска файлов заголовков.
--extra-ldflags="-Wl,-rpath,$FFLIBDIR" — заставляют линковщик прописать путь поиска бублиотек в исполняемый файл, который будет использоваться перед стандартными путями системы.
--extra-ldflags="-L$FFLIBDIR" — указывает линковщику путь для поиска библиотек при связывании.
Проверить, что связывание было выполнено с нужными библиотеками так: ldd ffmpeg | grep libav
Ссылки:
Installing libraries
FFMPEG Installation in /opt
Подсветка синтаксиса: gvim
@темы:
mplayer,
ffmpeg,
Linux,
hardcoded library path,
link full path,
Ubuntu 12.04