在 Windows 上构建 MLT 框架时出错
Error building MLT framework on Windows
我一直在遵循提供的官方构建指南 here。我需要 MLT 来创建视频播放器,并且我选择只安装前 4 个库,如指南中所述(FFmpeg、SDL、dlfcn-win32 和 libXML)。我还使用 QT 作为我的应用程序的主要框架。
就本指南而言,我有点困惑,因为我发现有关库应该去哪里的说明有点令人困惑。这是我当前的文件夹结构:
$HOME = C:\MinGW\msys.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
同时,因为一头雾水,我在[=25=里面有相同的文件夹(bin
、lib
、include
、share
) ].
然后我有 $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
的 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:现在我收到以下错误:
在编译代码 运行s(它生成 .o)之后,我在 avformat 模块的每个文件中得到 "undefined reference to 'ffmpeg_function'"。我注意到它正确定位了包含,所以问题一定出在找到库上。
我注意到 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)
EDIT4:为了进行测试,我在 avformat 模块的 config.mak 中添加了以下内容:
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 在该文件夹中。
EDIT5:看来我终于编译成功了!我将 LDFLAGS 更改为以下内容:
LDFLAGS+=-L/home/TKB/bin
LDFLAGS+=-lavformat-56 -lavcodec-56 -lavutil-54
LDFLAGS+=-lswscale-3
LDFLAGS+=-lavdevice-56
它没有错误地完成了。
谢谢Brian一直以来对我的帮助!
确保安装了 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。来自 MLT Windows 说明:
- 下载dlfcn-win32
- cd ~/src/dlfcn-win32-r19
- ./configure --enable-shared make all install
- 要使其可重新分发,请将 /mingw/bin/libdl.dll 复制到您的构建目录。
如果您确实遵循了这些说明,也许您需要找到一个地方来放置 libdl.dll 以便链接器找到它。
对于“-lbz2”错误,您似乎需要下载、编译和安装 bzip2 库以匹配 ffmpeg 编译所针对的库:
bzip2 1.0.6
查看您下载的 ffmpeg-shared 包附带的 README.txt 文件。有一长串外部库是针对 ffmpeg 编译的。 bzip2 是第一个。您可能需要 download/compile/install 更多这些。
编辑 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+config
MLT 配置脚本依赖于 pkg-config 来设置正确的链接器标志。可以扩展 MLT 配置脚本以允许用户指定正确的链接器标志。在那之前,我认为破解 config.mak(就像你所做的那样)将是让它在 Windows.
上运行的唯一方法
我很高兴你成功了。干杯!
我一直在遵循提供的官方构建指南 here。我需要 MLT 来创建视频播放器,并且我选择只安装前 4 个库,如指南中所述(FFmpeg、SDL、dlfcn-win32 和 libXML)。我还使用 QT 作为我的应用程序的主要框架。
就本指南而言,我有点困惑,因为我发现有关库应该去哪里的说明有点令人困惑。这是我当前的文件夹结构:
$HOME = C:\MinGW\msys.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
同时,因为一头雾水,我在[=25=里面有相同的文件夹(bin
、lib
、include
、share
) ].
然后我有 $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
的 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:现在我收到以下错误: 在编译代码 运行s(它生成 .o)之后,我在 avformat 模块的每个文件中得到 "undefined reference to 'ffmpeg_function'"。我注意到它正确定位了包含,所以问题一定出在找到库上。
我注意到 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)
EDIT4:为了进行测试,我在 avformat 模块的 config.mak 中添加了以下内容:
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 在该文件夹中。
EDIT5:看来我终于编译成功了!我将 LDFLAGS 更改为以下内容:
LDFLAGS+=-L/home/TKB/bin
LDFLAGS+=-lavformat-56 -lavcodec-56 -lavutil-54
LDFLAGS+=-lswscale-3
LDFLAGS+=-lavdevice-56
它没有错误地完成了。
谢谢Brian一直以来对我的帮助!
确保安装了 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。来自 MLT Windows 说明:
- 下载dlfcn-win32
- cd ~/src/dlfcn-win32-r19
- ./configure --enable-shared make all install
- 要使其可重新分发,请将 /mingw/bin/libdl.dll 复制到您的构建目录。
如果您确实遵循了这些说明,也许您需要找到一个地方来放置 libdl.dll 以便链接器找到它。
对于“-lbz2”错误,您似乎需要下载、编译和安装 bzip2 库以匹配 ffmpeg 编译所针对的库: bzip2 1.0.6
查看您下载的 ffmpeg-shared 包附带的 README.txt 文件。有一长串外部库是针对 ffmpeg 编译的。 bzip2 是第一个。您可能需要 download/compile/install 更多这些。
编辑 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+config
MLT 配置脚本依赖于 pkg-config 来设置正确的链接器标志。可以扩展 MLT 配置脚本以允许用户指定正确的链接器标志。在那之前,我认为破解 config.mak(就像你所做的那样)将是让它在 Windows.
上运行的唯一方法我很高兴你成功了。干杯!