ffmpeg mingw 编译 8192 个字符限制
ffmpeg mingw compilation 8192 char limits
我正在尝试在 Windows 10 上编译与 mingw64 共享的 ffmpeg。
这是配置命令:
./configure --arch=x86_64 --enable-shared --disable-static --prefix=/e/Downloads/ffmpeg-dyn/
一切正常。
然后我做:
mingw32-make.exe -j16
但是我遇到了这个错误:
LD libswresample/swresample-3.dll
LD libswscale/swscale-5.dll
dlltool -m i386:x86-64 -d libswresample/swresample-3.def -l libswresample/swresample.lib -D swresample-3.dll
dlltool -m i386:x86-64 -d libswscale/swscale-5.def -l libswscale/swscale.lib -D swscale-5.dll
STRIP libavcodec/x86/vp9itxfm.o
GEN libavcodec/libavcodec.ver
EXTERN_PREFIX="" AR="ar" NM="nm -g" ./compat/windows/makedef libavcodec/libavcodec.ver libavcodec/012v.o libavcodec/4xm.o libavcodec/8bps.o libavcodec/8svx.o libavcodec/a64multienc.o
... // SKIP all .o files for Whosebug
libavcodec/y41pdec.o libavcodec/y41penc.o libavcodec/ylc.o libavcodec/yop.o libavcodec/yuv4dec.o libavcodec/yuv4enc.o libavcodec/zerocodec.o libavcodec/zmbv.o libavcodec/zmbvenc.o > libavcodec/avcodec-58.def
Object does not exist: lib
mingw32-make: *** [ffbuild/library.mak:102: libavcodec/avcodec-58.dll] Error 1
如您所见,对象不存在:lib 没有任何意义。经过一些调查,这看起来是由于参数的 cmd.exe 8129 个字符限制。我尝试设置不同的 ComSpec 值,但没有成功。我还尝试对 library.mak 使用包含 *.o 文件的文件进行一些更改,但我遇到了很多错误。
这似乎是一个已知问题,但我尝试过但没有任何效果:https://trac.ffmpeg.org/ticket/6620
有什么解决办法吗?
感谢来自 ffmpeg 用户邮件列表的 Carl Eugen。
我更改了 library.mak 第 51 行
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver
EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(SUBDIR)*.o > $$(@:$(SLIBSUF)=.def)
$$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
$(SLIB_EXTRA_CMD)
对于每个 dll 问题,使用这个:
$ mingw32-make.exe V=1 libavcodec/avcodec-58.dll
描述:mingw32-make.exe V=1 subdirlib/libname.dll
与 Carl Eugen 的完整讨论可在此处获得:https://www.mail-archive.com/ffmpeg-user@ffmpeg.org/msg19801.html
使用 GNU make 而不是 mingw32-make。这至少对我有用。
如果您使用的是 msys2,请使用 'pacman -S make' 安装 GNU make。
我正在尝试在 Windows 10 上编译与 mingw64 共享的 ffmpeg。 这是配置命令:
./configure --arch=x86_64 --enable-shared --disable-static --prefix=/e/Downloads/ffmpeg-dyn/
一切正常。 然后我做:
mingw32-make.exe -j16
但是我遇到了这个错误:
LD libswresample/swresample-3.dll
LD libswscale/swscale-5.dll
dlltool -m i386:x86-64 -d libswresample/swresample-3.def -l libswresample/swresample.lib -D swresample-3.dll
dlltool -m i386:x86-64 -d libswscale/swscale-5.def -l libswscale/swscale.lib -D swscale-5.dll
STRIP libavcodec/x86/vp9itxfm.o
GEN libavcodec/libavcodec.ver
EXTERN_PREFIX="" AR="ar" NM="nm -g" ./compat/windows/makedef libavcodec/libavcodec.ver libavcodec/012v.o libavcodec/4xm.o libavcodec/8bps.o libavcodec/8svx.o libavcodec/a64multienc.o
... // SKIP all .o files for Whosebug
libavcodec/y41pdec.o libavcodec/y41penc.o libavcodec/ylc.o libavcodec/yop.o libavcodec/yuv4dec.o libavcodec/yuv4enc.o libavcodec/zerocodec.o libavcodec/zmbv.o libavcodec/zmbvenc.o > libavcodec/avcodec-58.def
Object does not exist: lib
mingw32-make: *** [ffbuild/library.mak:102: libavcodec/avcodec-58.dll] Error 1
如您所见,对象不存在:lib 没有任何意义。经过一些调查,这看起来是由于参数的 cmd.exe 8129 个字符限制。我尝试设置不同的 ComSpec 值,但没有成功。我还尝试对 library.mak 使用包含 *.o 文件的文件进行一些更改,但我遇到了很多错误。
这似乎是一个已知问题,但我尝试过但没有任何效果:https://trac.ffmpeg.org/ticket/6620
有什么解决办法吗?
感谢来自 ffmpeg 用户邮件列表的 Carl Eugen。
我更改了 library.mak 第 51 行
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver
EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(SUBDIR)*.o > $$(@:$(SLIBSUF)=.def)
$$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
$(SLIB_EXTRA_CMD)
对于每个 dll 问题,使用这个:
$ mingw32-make.exe V=1 libavcodec/avcodec-58.dll
描述:mingw32-make.exe V=1 subdirlib/libname.dll
与 Carl Eugen 的完整讨论可在此处获得:https://www.mail-archive.com/ffmpeg-user@ffmpeg.org/msg19801.html
使用 GNU make 而不是 mingw32-make。这至少对我有用。 如果您使用的是 msys2,请使用 'pacman -S make' 安装 GNU make。