注:ffmpeg-3.4.2中去掉了对libschroedinger的支持。
schroedinger是VC-2的实现。
schroedinger-1.0.11依赖于orc先编译orc-0.4.25,下载地址:/。解压后在orc-0.4.25目录下执行:
mkdir msys_build; ./configure --prefix=$(pwd)/msys_build; make; make install
编译的结果就在orc-0.4.25/ msys_build目录下。运行的时候需要将liborc-0.4-0.dll拷贝到同级目录下,schroedinger依赖于这个库。
从官网上下载schroedinger-1.0.,解压后在schroedinger-1.0.11目录下执行:
mkdir msys_build; export PKG_CONFIG_PATH=../orc-0.4.25/msys_build/lib/pkgconfig/; ./configure --prefix=$(pwd)/msys_build; make; make install
configure文件需要修改,不然编译会报下面的错误:
make[2]: Entering directory `/home/AA/ffmpeg_MSVC/contribute/MSVC/schroedinger-1.0.11/schroedinger'../orc-0.4.25/msys_build/ --inline --implementation -o tmp-orc.c ./ake[2]: ../orc-0.4.25/msys_build/: Command not foundmake[2]: *** [tmp-orc.c] Error 127make[2]: Leaving directory `/home/AA/ffmpeg_MSVC/contribute/MSVC/schroedinger-1.0.11/schroedinger'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/AA/ffmpeg_MSVC/contribute/MSVC/schroedinger-1.0.11'make: *** [all] Error 2
出错的目录是schroedinger-1.0.11/schroedinger的路径不对,查orc的.pc文件orc-0.4.25msys_buildlibpkgconfigorc-0.4.pc,里面的路径是绝对路径:
prefix=/home/AA/ffmpeg_MSVC/contribute/MSVC/orc-0.4.25/msys_build
路径是正确的,可能是pkg-config的时候出的问题。从schroedinger-1.0.11/config.log找到检测ORC时的打印:
configure:16425: checking for ORCconfigure:16433: PKG_CONFIG --exists --print-errors "orc-0.4 >= ORC_VER"configure:16436: $? = 0configure:16451: PKG_CONFIG --exists --print-errors "orc-0.4 >= ORC_VER"configure:16454: $? = 0configure:16490: result: yes
从configure的第16425行开始检测ORC,分别在16433、16451执行了pkg-config命令:
configure:16425: checking for ORCconfigure:16433: PKG_CONFIG --exists --print-errors "orc-0.4 >= ORC_VER"configure:16436: $? = 0configure:16451: PKG_CONFIG --exists --print-errors "orc-0.4 >= ORC_VER"
将这个pkg-config命令单独拿出来执行,$PKG_CONFIG就是pkg-config,ORC_VER在configure里面有定义,值为0.4.16,则单独的命令为:
export PKG_CONFIG_PATH=../orc-0.4.25/msys_build/lib/pkgconfig/; pkg-config --debug --exists --print-errors "orc-0.4 >= 0.4.16"
pkg-config要加--debug
参数,不然没有打印。pkg-config的打印:
Reading 'orc-0.4' from file '../orc-0.4.25/msys_build/lib/pkgconfig/orc-0.4.pc'Parsing package file '../orc-0.4.25/msys_build/lib/pkgconfig/orc-0.4.pc'line>prefix=/home/AA/ffmpeg_MSVC/contribute/MSVC/orc-0.4.25/msys_buildVariable declaration, 'prefix' overridden with '../orc-0.4.25/msys_build'line>exec_prefix=${prefix}Variable declaration, 'exec_prefix' has value '../orc-0.4.25/msys_build'
从打印里面可以看出prefix变量被../orc-0.4.25/msys_build覆盖。所以路径都不正确了。上网搜了一下“Variable declaration, ‘prefix’ overridden with”,,pkg-config可以加参数--dont-define-prefix
来指示不需要覆盖prefix变量。从schroedinger-1.0.11/Makefile里面可以看出,ORCC、ORC_CFLAGS、ORC_LIBS三个变量的值里面的路径被覆盖了。
在configure里面找到这三个变量赋值的地方,分别是:
ORCC=$PKG_CONFIG --variable=orcc orc-0.4pkg_cv_ORC_CFLAGS=$PKG_CONFIG --cflags "orc-0.4 >= $ORC_VER" 2>/dev/nullpkg_cv_ORC_LIBS=$PKG_CONFIG --libs "orc-0.4 >= $ORC_VER" 2>/dev/null
改成:
ORCC=$PKG_CONFIG --debug --dont-define-prefix --variable=orcc orc-0.4pkg_cv_ORC_CFLAGS=$PKG_CONFIG --debug --dont-define-prefix --cflags "orc-0.4 >= $ORC_VER" 2>/dev/nullpkg_cv_ORC_LIBS=$PKG_CONFIG --debug --dont-define-prefix --libs "orc-0.4 >= $ORC_VER" 2>/dev/null
重新configure再make就可以解决问题。prefix为何被覆盖,原因不清楚。
schroedinger-1.0.11编译到testsuite目录的时候会报错,缺_orc_code_orc_interleave2_s16、_orc_code_orc_deinterleave2_s16这两个符号,直接在wavelet_max_gain.c里面加上这两个符号的定义就可以解决:
OrcCode *_orc_code_orc_interleave2_s16;OrcCode *_orc_code_orc_deinterleave2_s16;
在编译ffmpeg-3.3的时候会报下面的错误:
libschroedingerenc.cC:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDEmath.h(515) : error C2059: 语法错误:“(”
这个是加了schroedinger后才出现的,math.h 515行是rint函数的定义,在schroedinger源代码下面直接搜索rint,发现rint已经有定义:
if defined(_MSC_VER)define rint(x) (floor((x) + 0.5))#endif
直接将其注释掉就可以了,并重新编译schroedinger。
本文发布于:2024-02-01 14:29:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170676895937258.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |