我一直在遵循这里提供的官方建筑指南。我需要MLT来创建一个视频播放器,我选择只安装前4个库,如指南(FFmpeg、SDL、dlfcn 32和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同时,由于我很困惑,我在$HOME/中有相同的文件夹( lib、include、share)。
然后我有带有mlt文件的$HOME/src/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当我运行时,仍然会得到一个错误,如下所示:
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 1EDIT2:我已经将dlfcn-win32的bin、lib和include分别添加到了c:/Qt/Tools/mingw482_32的bin、lib和include文件夹中,这解决了我的问题。现在我得到了一个新的错误,这个错误似乎是类似的解决方案,但我看不出-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 1EDIT3:现在我得到了以下错误:在编译代码运行(它生成.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 1dlls在那个文件夹上。
EDIT5:看来我终于编译好了!我将LDFLAGS更改为:
LDFLAGS+=-L/home/TKB/bin
LDFLAGS+=-lavformat-56 -lavcodec-56 -lavutil-54
LDFLAGS+=-lswscale-3
LDFLAGS+=-lavdevice-56它完好无损地结束了。
谢谢你,布莱恩,一直以来你给我的帮助!
发布于 2015-04-06 13:24:10
确保安装了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 32。根据MLT Windows指令:
如果您确实遵循了这些说明,也许您需要找到放置libdl.dll的位置,以便链接器找到它。
对于"-lbz2“错误,您似乎需要下载、编译和安装bzip2库,以匹配ffmpeg编译的库:bzip2 1.0.6。
查看下载的ffmpeg共享包附带的README.txt文件。有一长串的外部库是针对ffmpeg编译的。bzip2是第一个。您可能需要下载/编译/安装更多的这些。
编辑3:
您不应该同时指定--avformat--共享的和--avformat--静态的--它们是相互排斥的。您可以尝试指定这两种方法。或者,尝试设置--avformat-shared=$HOME/build/
编辑4:
我认为链接困难的原因是Zeranoe不再包含文件(.pc)。
http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=532&hilit=pkg+config
MLT配置脚本依赖于pkg-config来设置正确的链接器标志。可以扩展MLT配置脚本以允许用户指定正确的链接器标志。在此之前,我认为黑客config.mak (就像你一样)将是使其在Windows上工作的唯一途径。
我很高兴你能让它开始工作。干杯!
https://stackoverflow.com/questions/29460171
复制相似问题