Ошибка построения среды 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

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

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

2

Решение

Убедитесь, что у вас установлен 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&т = 532&hilit = PKG + конфигурации

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

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

2

Другие решения


По вопросам рекламы [email protected]