2

我一直在关注此处提供的官方建筑指南。我需要 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/mltmlt文件。

当我运行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 not being detected 问题。另外,我手动添加了 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,和文件夹中,这解决了我的问题。现在我收到了一个新错误,这似乎是类似的解决方案,但我看不出是什么。错误如下:binlibincludebinlibincludec:/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),我在 avformat 模块的每个文件中都得到“对'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 一直以来的帮助和帮助!

4

1 回答 1

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。根据 MLT Windows 说明:

  • 下载dlfcn-win32
  • cd ~/src/dlfcn-win32-r19
  • ./configure --enable-shared 全部安装
  • 要使其可再分发,请将 /mingw/bin/libdl.dll 复制到您的构建目录。

如果您确实遵循了这些说明,也许您需要找到一个放置 libdl.dll 的位置,以便链接器找到它。

对于“-lbz2”错误,您似乎需要下载、编译和安装 bzip2 库以匹配编译 ffmpeg 的库: bzip2 1.0.6

查看您下载的 ffmpeg-shared 软件包附带的 README.txt 文件。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+config

MLT 配置脚本依赖 pkg-config 来设置正确的链接器标志。可以扩展 MLT 配置脚本以允许用户指定正确的链接器标志。在此之前,我认为破解 config.mak(就像您所做的那样)将是使其在 Windows 上运行的唯一方法。

我很高兴你让它工作。干杯!

于 2015-04-06T13:24:10.973 回答