Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [РЕШЕНО] relocation error в случае компиляции ffmpeg с патчем для libavfilter  (Прочитано 3517 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 0xAD

  • Автор темы
  • Любитель
  • *
  • Сообщений: 62
    • Просмотр профиля
Здравствуйте!
Устанавливаю ffmpeg из исходников. Делаю это потому, что в пакете из основного репозитория не подходят конфигурационные параметры. Кроме того, мне нужна версия библиотеки libavfilter (входящей в состав ffmpeg) не из основной ветки ffmpeg'а, а та, которая разрабатывается в рамках Google Summer of Code, и из которой время от времени добавляются новые фичи в основной ffmpeg. Скачиваю патч для libavfilter из репозитория FFmpeg SoC. В скачанном есть файл checkout.sh, который закачивает из SVN предназначенную для пропатчивания версию FFmpeg, обновляет в только что скачанных исходниках папку libswscale до нужной верси (тоже из SVN) (в этой папке находяться исходники библиотеки libswscale (входящей в состав ffmpeg)) и собственно патчит FFmpeg, добавляя новые возможности libavfilter. Выполняю этот скрипт, далее конфигурирую нужным образом, компилирую и устанавливаю. Вот точный набор команд, которые я выполняю:
(Нажмите, чтобы показать/скрыть)
Последняя на момент написания этого сообщения версия FFmpeg SoC - r5888 от 02.08.2010 20:18:10 UTC+4, причём последнее изменение в libavfilter было сделано в ревизии r5873 от 27.07.2010 20:28:44 UTC+4. Последняя версия патча libavfilter предназначена для версии FFmpeg r24545 и версии libswscale r31782. Вот содержимое файла checkout.sh из этой версии, который делает пропатчивание:
(Нажмите, чтобы показать/скрыть)
Собственно, проблема в том, что установка из исходников в общем-то заканчивается успешно, но на одном компьютере ffmpeg после установки работает нормально, а на втором при запуске выдаётся ошибка: ffmpeg: relocation error: /usr/local/lib/libavfilter.so.1: symbol sws_isSupportedInput, version LIBSWSCALE_0 not defined in file libswscale.so.0 with link time reference. В обоих случаях набор действий абсолютно одинаковый (приведён выше), набор ПО в системе практически одинаковый, но на втором архитектура x86, а на первом x86-64. Что в общем означает эта ошибка? Насколько я понял, она означает, что libavfilter.so.1 исползует функцию sws_isSupportedInput версии LIBSWSCALE_0 из библиотеки libswscale.so.0, но её в такой версии там нет. Обе библиотеки компилируются в процессе установки ffmpeg. И на первом, и на втором компьютере для установки используется абсолютно идентичный набор действий, компилируется один и тот же исходный код. Как может на первом компьютере эта функция иметься в такой версии, а на втором нет? Перекомпилировал несколько раз, поведение сохраняется. Исходники в SVN не меняются с 27.07.10 (то есть скачивается и компилируется одно и то же).
Версии ПО, о котором идёт речь: Ubuntu 10.04, ffmpeg SVN-r24545, libswscale SVN-r31782, libavfilter-soc SVN-r5873 -- SVN-r5888 (они все одинаковые).
« Последнее редактирование: 05 Августа 2010, 15:26:46 от 0xAD »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Покажите вывод ldd ffmpeg на одном и на другом компе.

Сдаётся мне, что на втором компе (где не работает) ld при запуске линкует ffmpeg с неправильной версией libswscale.so.0. Быть может, в системе есть ещё одна такая библиотека?
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн 0xAD

  • Автор темы
  • Любитель
  • *
  • Сообщений: 62
    • Просмотр профиля
Да, похоже, именно в этом и была проблема. Спасибо огромное! Вот выводы ldd ffmpeg на первом компе:
(Нажмите, чтобы показать/скрыть)
На втором компе:
(Нажмите, чтобы показать/скрыть)

При запуске env LD_LIBRARY_PATH=/usr/local/lib ffmpeg все работает нормально.

Оффлайн lolshik

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Коллеги, помогите пожалуйста.

Использую этот же ffmpeg с патчем для libavfilter, как коллега выше.

Все отлично собирается и устанавливается с опциями  ./configure --enable-avfilter

Если включить libx264, то возникает ошибка при компиляции.  

./configure --enable-avfilter --enable-libx264 --enable-gpl
make

CC      ffmpeg.o
ffmpeg.c: In function 'output_packet':
ffmpeg.c:1049: warning: dereferencing pointer 'picture2' does break strict-aliasing rules
ffmpeg.c:1639: note: initialized from here
CC      cmdutils.o
cmdutils.c: In function 'read_file':
cmdutils.c:669: warning: ignoring return value of 'fread', declared with attribute warn_unused_result
LD      ffmpeg_g
/root/source/libavfilter/ffmpeg/libavcodec/libavcodec.a(libx264.o): In function `X264_frame':
/root/source/libavfilter/ffmpeg/libavcodec/libx264.c:92: undefined reference to `x264_picture_init'
/root/source/libavfilter/ffmpeg/libavcodec/libavcodec.a(libx264.o): In function `X264_init':
/root/source/libavfilter/ffmpeg/libavcodec/libx264.c:300: undefined reference to `x264_encoder_open_104'
collect2: ld returned 1 exit status
make: *** [ffmpeg_g] Error 1

Не могу понять что он хочет и как это дело починить. Поставил свежую lib264, потом деинсталил и поставил старее. Результат один и тот же.
Кто может подсказать в чем проблема?

Заранее благодарю.
« Последнее редактирование: 23 Сентября 2010, 04:21:24 от lolshik »

 

Страница сгенерирована за 0.087 секунд. Запросов: 23.