我正在寻求帮助,因为我无法使用AV1解码库"libdav1d"构建ffmpeg。
我在Windows 10下。
我可以构建ffmpeg没有"libdav1d"。为此,我使用msys 1.0。
在msys 1.0中,我输入:
./configure --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-shared
make
,它工作得很好:我可以在x64模式下构建ffmpeg。使用稍微不同的。/configure行,我也可以在win32模式下构建它。
然后我尝试像这样包含libdav1d:
./configure --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-shared --enable-libdav1d
失败,显示如下错误信息:
ERROR: dav1d >= 0.5.0 not found using pkg-config
所以我尝试了两种不同的方法:
- 我从https://code.videolan.org/videolan/dav1d下载了libdav1d的源代码,我试着编译它
- 我还从https://code.videolan.org/videolan/dav1d 下载了已经构建的库(适用于win64和win32)
***关于第一种方法(从源代码构建libdav1d),我已经看到我需要安装meson, ninja和nasm。
我在某个地方看到我应该使用msys 2.0来做这些,所以我安装了msys 2.0并运行它。
然后按照https://code.videolan.org/videolan/dav1d
上的指示操作但是当我运行ninja时,我得到这样的编译错误:
$ ninja
[1/161] Compiling C object src/libdav1d_bitdepth_8.a.p/cdef_tmpl.c.obj
FAILED: src/libdav1d_bitdepth_8.a.p/cdef_tmpl.c.obj
"cl" "-Isrclibdav1d_bitdepth_8.a.p" "-Isrc" "-I..src" "-I." "-I.." "-Iincludedav1d" "-I..includedav1d" "-Iinclude" "-I..include" "-I..includecompatmsvc" "-DNDEBUG" "/MD" "/nologo" "/showIncludes" "/W3" "/O2" "-D_POSIX_C_SOURCE=200112L" "-wd4028" "-wd4090" "-wd4996" "-DBITDEPTH=8" "/Fdsrclibdav1d_bitdepth_8.a.pcdef_tmpl.c.pdb" /Fosrc/libdav1d_bitdepth_8.a.p/cdef_tmpl.c.obj "/c" ../src/cdef_tmpl.c
..includecommon/attributes.h(133) : error C2054: '(' attendu après 'inline'
..includecommon/attributes.h(133) : error C2085: 'ctz' : ne figure pas dans la liste de paramètres formels
..includecommon/attributes.h(133) : error C2143: erreur de syntaxe : absence de ';' avant '{'
..includecommon/attributes.h(139) : error C2054: '(' attendu après 'inline'
..includecommon/attributes.h(139) : error C2085: 'clz' : ne figure pas dans la liste de paramètres formels
..includecommon/attributes.h(139) : error C2143: erreur de syntaxe : absence de ';' avant '{'
..includecommon/attributes.h(152) : error C2054: '(' attendu après 'inline'
<and many others...>
当我尝试重新配置介子时,我得到这个错误:
$ meson --reconfigure
The Meson build system
Version: 0.59.2
Source dir: /c/projects/ffmpeg44/dav1d
Build dir: /c/projects/ffmpeg44/dav1d/build
Build type: native build
Project name: dav1d
Project version: 0.9.2
C compiler for the host machine: cl (msvc 16.00.40219.01 "Compilateur d'optimisation Microsoft (R) 32�bits C/C++ version�16.00.40219.01 pour 80x86")
C linker for the host machine: link link 10.00.40219.01
../meson.build:25:0: ERROR: Unknown linker(s): [['lib'], ['llvm-lib']]
The following exception(s) were encountered:
Running "lib /?" gave "[Errno 2] No such file or directory: 'lib'"
Running "llvm-lib /?" gave "[Errno 2] No such file or directory: 'llvm-lib'"
A full log can be found at /c/projects/ffmpeg44/dav1d/build/meson-logs/meson-log.txt
我也试图从Visual Studio 2010的msys 2.0 bin文件夹中复制cl.exe和link.exe(取代已经存在的link.exe),但我没有成功。
***关于第二种方法,(从源代码构建libdav1d),我已经看到我需要安装meson, ninja和nasm。
我从https://code.videolan.org/videolan/dav1d下载了包含已经构建的libdav1d库的zip包
然后我创建了一个文件夹ffmpeg/libdav1d,我复制了bin,包括和lib文件夹从zip到这个ffmpeg/libdav1d文件夹。
然后在msys 1.0中运行./configure --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-shared --enable-libdav1d
然后我得到这个错误:
ERROR: dav1d >= 0.5.0 not found using pkg-config
如果我理解正确,问题来自于pkg-config不知道在哪里找到dav1d(即使它是在ffmpeg/libdav1d,像其他ffmpeg库ffmpeg/libavcodec, ffmpeg/libavdevice, ffmpeg/libavformat,…)
所以我寻找一个解决方案来告诉pkg-config libdav1d在哪里。
echo $PKG_CONFIG_PATH
返回空应答
所以我定义了环境变量PKG_CONFIG_PATH,就像在我的msys 2.0中定义的那样,输入:export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig
但是由于这些文件夹在我的msys 1.0中不存在,我创建了这个文件夹(在Windows中)
C:MinGWmsys1.0sharepkgconfig
在这个文件夹中,我复制了文件"dav1d.pc"然后修改文件的第一行(变量prefix的值):
prefix=/c/projects/ffmpeg44/ffmpeg/libdav1d
libdir=${prefix}/lib
includedir=${prefix}/include
Name: libdav1d
Description: AV1 decoding library
Version: 0.9.2
Libs: -L${libdir} -ldav1d
Cflags: -I${includedir}
但是当我使用。/configure时,我一直有这个错误消息:ERROR: dav1d >= 0.5.0 not found using pkg-config
所以有人能给我一步一步的指令来构建(在Windows下)ffmpeg与libdav1d ?
如果可能的话,我宁愿构建libdav1d并将其包含在ffmpeg中,而不是使用其他人已经构建的libdav1d。
提前感谢!
我可以使用这些介子标志在MSYS下使用MinGW-w64构建dav1d 0.7.0:-Denable_tools=true -Denable_examples=false -Dfuzzing_engine=none -Denable_tests=false -Dtestdata_tests=false
要使pkg-config
找到.pc
文件,您应该将包含.pc
文件的文件夹添加到PKG_CONFIG_PATH
环境变量。