неопределенная ссылка на `x264_encoder_open_125'

При установке ffmpeg на Ubuntu 12.04

Я получаю следующую ошибку

libavcodec/libavcodec.a(libx264.o): In function `X264_init':
/root/ffmpeg/libavcodec/libx264.c:492: undefined reference to `x264_encoder_open_125'
collect2: ld returned 1 exit status
make: *** [ffmpeg_g] Error 1

Я следую инструкциям, приведенным на странице http://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide.

Кто-нибудь знает об этой ошибке?


person Vishal    schedule 07.08.2012    source источник
comment
Вы должны убедиться, что у вас также правильно скомпилирован x264 из исходного кода. Обычно это наблюдается, если либо скомпилирована неправильная версия x264, либо если существует конфликт между предустановленной версией и версией, которую вы установили из исходного кода. Попробуйте установить LD_LIBRARY_PATH в каталог, где должен быть libx264.   -  person av501    schedule 07.08.2012
comment
Вы дословно следовали инструкции? Как упомянул пользователь1559108, у вас, вероятно, одновременно установлены две разные версии x264 (включая пакет libx264-dev).   -  person llogan    schedule 08.08.2012


Ответы (3)


Это типичная проблема для людей, у которых уже установлен x264 через систему управления пакетами. Вы можете решить это как минимум двумя способами:

  1. Удалите уже существующий x264 из вашей системы через систему управления пакетами:

    # apt-get remove x264
    

    и скомпилировать новый x264 из исходного кода

  2. Не удаляйте пакет x264, а соберите новый x264, а затем скомпилируйте ваш ffmpeg, сказав ему использовать эту недавно скомпилированную библиотеку x264, указав каталог, в котором находится ваша скомпилированная библиотека x264, используя упомянутую переменную среды LD_LIBRARY_PATH:

    LD_LIBRARY_PATH=/path/to/my/compiled/x264/library ./configure --enable-libx264 ...
    

Более подробную информацию можно найти по этим ссылкам:

person Mladen B.    schedule 18.06.2013
comment
у меня сработало что-то вроде этого (с macports, установленным в /opt/rdp_project_local с установленным там x264): `CFLAGS=-I/opt/rdp_project_local/include LDFLAGS=-L/opt/rdp_project_local/lib ./configure... - person rogerdpack; 17.12.2013
comment
Вы также можете рассмотреть PKG_CONFIG_PATH=/path/to/my/compiled/x264/library ./configure ... - person Wu Yongzheng; 01.03.2016
comment
Решение обычно не требует самостоятельной сборки libx264. просто убедитесь, что вы правильно установили libx264-dev, не мешая другим версиям, которые также могли быть помещены в /usr/local/lib и т.п. - person dvo; 18.10.2020

добавить заголовок и путь к библиотеке

gcc x264_test1.c -o x264_encoder -I/usr/local/include -L/usr/local/lib -lpthread -lm -lx264

person 杨佩文    schedule 15.10.2018

Обычно ошибка означает, что двоичный файл библиотеки libx264.so, полученный компоновщиком, не соответствует версии в заголовочном файле x264.h. См. следующие строки кода в этом заголовочном файле:

/* Force a link error in the case of linking against an incompatible API version.
 * Glue #defines exist to force correct macro expansion; the final output of the macro
 * is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */
#define x264_encoder_glue1(x,y) x##y
#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y)
#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD)

Решение обычно не требует самостоятельной сборки libx264, просто убедитесь, что вы правильно установили libx264-dev без вмешательства в другие версии, которые также могут быть в /usr/local/lib или подобных.

У меня была такая же проблема с версией 155: undefined reference to 'x264_encoder_open_155'. В моем случае это было из-за того, что у меня была в /usr/lib/x86_64-linux-gnu и неподходящая копия libx264.so (которую я сделал сам и нечисто скопировал туда). Так что все, что мне нужно было сделать, это sudo apt-get install --reinstall libx264-dev.

person dvo    schedule 17.10.2020