Ошибка построения среды MLT в Windows

Я следовал официальному руководству по строительству, представленному здесь. Мне нужен MLT для создания видеоплеера, и я решил установить только первые 4 библиотеки, как указано в руководстве (FFmpeg, SDL, dlfcn-win32 и libXML). Я также использую QT в качестве основного фреймворка для своего приложения.

Я немного запутался в том, что касается этого руководства, потому что я нахожу инструкции о том, куда библиотеки должны идти, немного запутанно. Это моя текущая структура папок:

$HOME = C:\MinGW\msys\1.0\home\TKB (TKB is my user)
$HOME/build/lib -> libraries
$HOME/build/bin -> binaries
$HOME/build/include -> includes
$HOME/build/share/ffmpeg -> for the "presets" folder

В то же время, потому что я был смущен, у меня есть те же папки (bin, lib, include, share) внутри $HOME/,

Тогда у меня есть $HOME/src/mlt с файлами MLT.

Когда я бегу configure Я получаю команду (я отключил библиотеки, которые не установил, чтобы уменьшить вывод на консоль):

Command: ./configure --prefix=$HOME/build --target-os=MinGW --enable-gpl --disable-decklink --disable-frei0r --disable-gtk2 --disable-sox --disable-jackrack --disable-swfdec --disable-resample

Configuring framework:
Configuring modules:
Configuring modules/avformat:
- libavformat not found: disabling
Configuring modules/core:
Configuring modules/feeds:
Configuring modules/kdenlive:
Configuring modules/linsys:
- does not build on OS X or Windows:disabling
Configuring modules/lumas:
Configuring modules/motion_est:
Configuring modules/normalize:
Configuring modules/oldfilm:
Configuring modules/opengl:
- movit not found: disabling
Configuring modules/plus:
Configuring modules/plusgpl:
Configuring modules/qt:
- Libexif not found, disabling exif features (auto rotate)
- Qt not found: disabling
Configuring modules/rtaudio:
Configuring modules/sdl:
Configuring modules/vid.stab:
- vid.stab not found: disabling
Configuring modules/videostab:
Configuring modules/vmfx:
Configuring modules/xine:
Configuring modules/xml:
- xml2 not found: disabling xml module
Configuring mlt++:
Configuring swig:
GPLv2 license used; GPLv3 components disabled

У меня есть папки ffmpeg и xml2 в папках, но, похоже, скрипт не может их найти. Я также установил QT в папку по умолчанию, и он, похоже, не находит его.

Я все равно попытался установить (сделать все установки) и получаю следующую ошибку:

c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -ldl
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpthread
collect2.exe: error: ld returned 1 exit status
make[1]: *** [libmlt-6.dll] Error 1
make[1]: Leaving directory '/home/TKB/src/mlt-0.9.6/src/framework'
make: *** [all] Error 1

Может кто-нибудь помочь мне с этими ошибками?

Спасибо за ваше время.

РЕДАКТИРОВАТЬ: я обнаружил, что я сделал ошибку именования при создании pkgconfig папка, изменение которой решило проблему с обнаружением xml2. Кроме того, я добавил пути для ffmpeg и qt вручную, и это также, похоже, решило проблему. Итак, теперь я получаю следующее:

./configure --prefix=/home/TKB/build --enable-gpl --disable-decklink --disable-frei0r --disable-gtk2 --disable-sox --disable-jackrack --disable-swfdec --disable-resample --qt-libdir=C:/Qt/5.3/mingw482_32/lib --qt-includedir=C:/Qt/5.3/mingw482_32/include --avformat-shared=/home/TKB/share/ffmpeg --avformat-static=/home/TKB/bin

Configuring framework:
Configuring modules:
Configuring modules/avformat:
Configuring modules/core:
Configuring modules/feeds:
Configuring modules/kdenlive:
Configuring modules/linsys:
- does not build on OS X or Windows:disabling
Configuring modules/lumas:
Configuring modules/motion_est:
Configuring modules/normalize:
Configuring modules/oldfilm:
Configuring modules/opengl:
- movit not found: disabling
Configuring modules/plus:
Configuring modules/plusgpl:
Configuring modules/qt:
- Libexif not found, disabling exif features (auto rotate)
- Qt version 5.x detected
- Include directory: C:/Qt/5.3/mingw482_32/include
Configuring modules/rtaudio:
Configuring modules/sdl:
Configuring modules/vid.stab:
- vid.stab not found: disabling
Configuring modules/videostab:
Configuring modules/vmfx:
Configuring modules/xine:
Configuring modules/xml:
Configuring mlt++:
Configuring swig:
GPLv2 license used; GPLv3 components disabled

Когда я запускаю make all install, я все еще получаю сообщение об ошибке:

c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -ldl
collect2.exe: error: ld returned 1 exit status
make[1]: *** [libmlt-6.dll] Error 1
make[1]: Leaving directory '/home/TKB/src/mlt/src/framework'
make: *** [all] Error 1

EDIT2: я добавил dlfcn-win32"s bin, lib а также include к соответствующему bin, lib а также include папки в c:/Qt/Tools/mingw482_32, который решил мою проблему. Теперь я получаю новую ошибку, которая кажется похожего решения, но я не вижу, что -lbz2 является. Ошибка следует ниже:

c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lbz2
collect2.exe: error: ld returned 1 exit status
make[2]: *** [../libmltavformat.dll] Error 1
make[2]: Leaving directory '/home/TKB/src/mlt/src/modules/avformat'
make[1]: *** [all] Error 1
make[1]: Leaving directory '/home/TKB/src/mlt/src/modules'
make: *** [all] Error 1

EDIT3: Прямо сейчас я получаю следующую ошибку: после запуска кода компиляции (он генерирует.o) я получаю "неопределенную ссылку на 'ffmpeg_function'" в каждом файле модуля avformat. Я заметил, что он правильно находит включаемые файлы, поэтому проблема заключается в поиске библиотек.

Я заметил, что в файле config.mak LDFLAGS выглядят так:

LDFLAGS+=-L/home/TKB/bin/libavformat -L/home/TKB/bin/libavcodec -L/home/TKB/bin/libavutil
LDFLAGS+=-L/home/TKB/bin/libswscale
LDFLAGS+=-L/home/TKB/bin/libavdevice

Разве это не должно быть -l (нижний регистр), чтобы идентифицировать файл вместо папки? Или он ожидает одну папку на одну библиотеку? Кроме того, библиотеки ffmpeg имеют разные имена (например, avformat-56.dll).

РЕДАКТИРОВАТЬ 4: Чтобы проверить вещи, я добавил следующее в config.mak модуля avformat:

LDFLAGS+=-l/home/TKB/bin/avformat-56 -l/home/TKB/bin/avcodec-56 -l/home/TKB/bin/avutil-54
LDFLAGS+=-l/home/TKB/bin/swscale-3
LDFLAGS+=-l/home/TKB/bin/avdevice-56

Предыдущая ошибка исчезла, но теперь я получаю следующую:

c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lC:/MinGW/mysys/1.0/home/TKB/bin/avformat-56
c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lC:/MinGW/mysys/1.0/home/TKB/bin/avcodec-56
c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lC:/MinGW/mysys/1.0/home/TKB/bin/avutil-54
c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lC:/MinGW/mysys/1.0/home/TKB/bin/swscale-3
c:/Qt/Tools/mingw482_32/bin/../lib/gcc/i68-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lC:/MinGW/mysys/1.0/home/TKB/bin/avdevice-56
collect2.exe: error: ld returned 1 exit status
make[2]: *** [../libmltavformat.dll] Error 1
make[2]: Leaving directory '/home/TKB/src/mlt/src/modules/avformat'
make[1]: *** [all] Error 1
make[1]: Leaving directory '/home/TKB/src/mlt/src/modules'
make: *** [all] Error 1

DLL находятся в этой папке.

РЕДАКТИРОВАТЬ5: Кажется, мне наконец-то удалось собрать! Я изменил LDFLAGS на следующее:

LDFLAGS+=-L/home/TKB/bin
LDFLAGS+=-lavformat-56 -lavcodec-56 -lavutil-54
LDFLAGS+=-lswscale-3
LDFLAGS+=-lavdevice-56

И все закончилось без ошибок.

Спасибо Брайан за все время и помощь, которую вы мне оказали!

1 ответ

Решение

Убедитесь, что у вас установлен pkg-config:

http://www.mltframework.org/pub/Shotcut/SetupWindowsDev/pkg-config.exe

Вы должны быть в состоянии запустить pkg-config из командной строки и получить хороший ответ. например:

# pkg-config --modversion libxml-2.0
2.9.1
# pkg-config --modversion QtGui
4.8.6

Если вы не получили хорошего ответа от pkg-config, вам может потребоваться установить PKG_CONFIG_PATH, чтобы он указывал на файлы.pc для каждой из зависимостей.

Также ознакомьтесь с документацией по pkg-config. Есть некоторые особые соображения, которые вам могут понадобиться для Windows:

http://linux.die.net/man/1/pkg-config

Вам также необходимо установить dlfcn-win32. Из инструкции Windows MLT:

  • Скачать dlfcn-win32
  • cd ~ / src / dlfcn-win32-r19
  • ./configure --enable-shared сделать все установить
  • Чтобы сделать это распространяемым, скопируйте /mingw/bin/libdl.dll в каталог сборки.

Если вы действительно следовали этим инструкциям, возможно, вам нужно найти место для размещения libdl.dll, чтобы компоновщик его нашел.

Для ошибки "-lbz2", похоже, вам нужно скачать, скомпилировать и установить библиотеку bzip2, чтобы она соответствовала той, с которой был скомпилирован ffmpeg: bzip2 1.0.6

Взгляните на файл README.txt, который поставляется вместе с загруженным вами пакетом ffmpeg-shared. Существует длинный список внешних библиотек, с которыми была скомпилирована ffmpeg. bzip2 - первый. Возможно, вам придется скачать / скомпилировать / установить больше из них.

РЕДАКТИРОВАТЬ 3:

Вы не должны указывать --avformat-shared и --avformat-static - они взаимоисключающие. Вы можете попытаться указать ни один из них. Или попробуйте установить --avformat-shared=$HOME/build/

РЕДАКТИРОВАТЬ 4:

Я думаю, что причина проблем с компоновкой заключается в том, что в сборках Zeranoe больше нет файлов pkg-config (.pc).

http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=532&hilit=pkg%20config

Сценарий MLT configure использует pkg-config для установки правильных флагов компоновщика. Сценарий настройки MLT может быть расширен, чтобы позволить пользователю указывать правильные флаги компоновщика. Пока это не произойдет, я думаю, что взлом config.mak (как вы это сделали) будет единственным способом заставить его работать в Windows.

Я рад, что ты получил это на работу. Ура!

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