Компиляция stati c libs ffmpeg с x264 в Msys2 для Visual Studio, но libx264 никогда не обнаруживается - PullRequest
1 голос
/ 29 мая 2020

Предварительно загрузив и скомпилировав ffmpeg 4.2.2 в библиотеки c с использованием MSYS2 и набора инструментов Visual Studio 2015 x64. Я хочу добавить код x264 c из VLC / VideoLan, скомпилировав его также в библиотеку stati c. Однако при запуске Configure для ffmpeg появляется сообщение об ошибке «libx264 not found».

Я построил ffmpeg без x264 VideoLAN в «/c/ThirdParty/opt/ffmpeg-4.2.2» с установкой «make install» в "/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build".

Я использую следующие шаги для компиляции из исходного кода x264 и добавления его в сборку ffmpeg с использованием той же цепочки инструментов VS2015:

  1. Запустите «Командную строку VS2015 x64 Natice Tools»
  2. Из этой командной строки VS2015 запустите «c: \ msys64 \ msys2_shell.cmd -mingw64 -use-full-path»
  3. Внутри оболочки MSYS2 запустите "cd / c / ThirdParty / opt"
  4. git clone http://git.videolan.org/git/x264.git
  5. cd x264
  6. CC = cl ./configure --enable-stati c --prefix = / c / ThirdParty / opt / ffmpeg-4.2.2 / ffmpeg_build --disable-cli
  7. make
  8. сделать установку
  9. cd ../ffmpeg-4.2.2
  10. PKG_CONFIG_PATH = / c / ThirdParty / opt / ffmpeg-4.2.2 / ffmpeg_build / lib \ ./configure --prefix =. / ffmpe g_build --toolchain = msv c --arch = x86_64 \ --target-os = win64 --extra-cflags = -MT --extra-cxxflags = -MT \ --extra-ldflags = -L / c / ThirdParty / opt / ffmpeg-4.2.2 / ffmpeg_build / lib \ --enable-x86asm --enable-asm --enable-stati c --disable-shared \ --disable-debug --enable-gpl - enable-avresample --enable-libx264

Шаги работают, компиляция x264 выполняется нормально, но вывод Configure ffmpeg - «ОШИБКА: libx264 не найден».

I также попробовали вариант использования этих двух строк вместо шагов 6 и 10 выше:

  • CC = cl ./configure --enable-stati c --prefix = / usr / local --disable-cli
  • PKG_CONFIG_PATH = / usr / local / lib / pkgconfig: $ PKG_CONFIG_PATH ./configure --prefix =. / ffmpeg_build --toolchain = msv c --arch = x86_64 --target -os = win64 --extra-cflags = -MT --extra-libs = / usr / local / lib / libx264.lib --extra-cxxflags = -MT --enable-x86asm --enable-asm --enable- stati c --disable-shared --disable-debug --enable-gpl --enable-avresample --enable- libx264

Эта версия пройдет мимо Configure, в которой я могу запустить make, но make завершается с ошибкой из-за ряда неразрешенных функций X264_ * при связывании ffmpeg_g.exe, всего 14 неразрешенных функций . Ошибки показаны внизу, но сначала:

Когда я смотрю в /c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib, я вижу:

$ ls -l ./ffmpeg_build/lib
total 50988
-rw-r--r-- 1 blake blake 27184250 May 11 16:29 libavcodec.a
-rw-r--r-- 1 blake blake   231304 May 11 16:29 libavdevice.a
-rw-r--r-- 1 blake blake  8574628 May 11 16:29 libavfilter.a
-rw-r--r-- 1 blake blake  8081930 May 11 16:29 libavformat.a
-rw-r--r-- 1 blake blake  1300118 May 11 16:29 libavutil.a
-rw-r--r-- 1 blake blake    61844 May 11 16:29 libpostproc.a
-rw-r--r-- 1 blake blake   348732 May 11 16:29 libswresample.a
-rw-r--r-- 1 blake blake  1316008 May 11 16:29 libswscale.a
-rw-r--r-- 1 blake blake  5086976 May 28 18:08 libx264.lib
drwxr-xr-x 1 blake blake        0 May 28 18:08 pkgconfig

Аналогично для /c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib/pkgconfig:

$ ls -l ./ffmpeg_build/lib/pkgconfig/
total 9
-rw-r--r-- 1 blake blake 353 May 11 16:29 libavcodec.pc
-rw-r--r-- 1 blake blake 554 May 11 16:29 libavdevice.pc
-rw-r--r-- 1 blake blake 449 May 11 16:29 libavfilter.pc
-rw-r--r-- 1 blake blake 393 May 11 16:29 libavformat.pc
-rw-r--r-- 1 blake blake 306 May 11 16:29 libavutil.pc
-rw-r--r-- 1 blake blake 317 May 11 16:29 libpostproc.pc
-rw-r--r-- 1 blake blake 322 May 11 16:29 libswresample.pc
-rw-r--r-- 1 blake blake 315 May 11 16:29 libswscale.pc
-rw-r--r-- 1 blake blake 300 May 28 18:08 x264.pc

И глядя в / usr / local / lib, я вижу libx264.lib и каталог pkgconfig.

Ошибки, сгенерированные моими последними попытками, выглядят так:

LD      ffmpeg_g.exe
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_default referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_parse referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_default_preset referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_apply_fastfirstpass referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_apply_profile referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_picture_init referenced in function X264_frame
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_open_160 referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_reconfig referenced in function reconfig_encoder
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_headers referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_encode referenced in function X264_frame
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_close referenced in function X264_close
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_delayed_frames referenced in function X264_frame
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_maximum_delayed_frames referenced in function X264_init
libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_levels referenced in function X264_init
ffmpeg_g.exe : fatal error LNK1120: 14 unresolved externals
make: *** [Makefile:111: ffmpeg_g.exe] Error 96

Возможно, что-то не так с параметрами --extra-ldflags или --extra-libs в меню Configure ffmpeg, но после попытки поиск в Google, Я спрашиваю вас. Вы знаете, что не так с этой строкой настройки ffmpeg? Шаг 10, выше.

1 Ответ

2 голосов
/ 29 мая 2020

Прокомментируйте или удалите эти строки в libavcodec \ libx264. c:

#if defined(_MSC_VER)
#define X264_API_IMPORTS 1
#endif

Это, вероятно, должно помочь с вашими unresolved external symbol ошибками. Что касается ошибок с исходным элементом 10, то вы установили неправильное значение для PKG_CONFIG_PATH, указывающее на каталог lib вместо каталога pkgconfig.

...