对'ff_put_pixels_clamped_mmx'的未定义引用

时间:2017-04-24 12:49:37

标签: windows ffmpeg mingw msys2 mingw-w64

我有一个Windows 8.1 64位,intel i7。 我正在尝试从源代码3.2.4版本构建ffmpeg动态库(dll)。为此,我克隆了ffmpeg git存储库,并检出了标记n3.2.4 我在我的Windows 8.1中安装了mingw64,打开了一个mingw64 shell。 我在构建之前运行了“configure”命令,使用以下开关:

./configure --prefix=ffmpeg/ --disable-gpl --disable-nonfree --enable-shared --disable-static --disable-doc  --disable-yasm --disable-debug --disable-network

在某些时候,在链接阶段,它会以这些ld错误退出:

WINDRES libswresample/swresampleres.o
GEN     libswresample/libswresample.ver
LD      libswresample/swresample-2.dll
sed -e "s/ @[^ ]*//" libswresample/swresample-2.orig.def > libswresample/swresample-2.def; dlltool -m i386:x86-64 -d libswresample/swresample-2.def -l libswresample/swresample.lib -D swresample-2.dll
LD      libavcodec/avcodec-57.dll
libavcodec/x86/simple_idct.o: In function `ff_simple_idct_put_mmx':
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:911: undefined reference to `ff_put_pixels_clamped_mmx'
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:911:(.text+0x1fb0): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ff_put_pixels_clamped_mmx'
libavcodec/x86/simple_idct.o: In function `ff_simple_idct_add_mmx':
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:916: undefined reference to `ff_add_pixels_clamped_mmx'
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:916:(.text+0x1fe0): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ff_add_pixels_clamped_mmx'
libavcodec/x86/simple_idct.o: In function `ff_simple_idct_put_sse2':
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:921: undefined reference to `ff_put_pixels_clamped_sse2'
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:921:(.text+0x2010): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ff_put_pixels_clamped_sse2'
libavcodec/x86/simple_idct.o: In function `ff_simple_idct_add_sse2':
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:926: undefined reference to `ff_add_pixels_clamped_sse2'
C:\GitRepos\ffmpeg/libavcodec/x86/simple_idct.c:926:(.text+0x2040): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ff_add_pixels_clamped_sse2'

发现在某些地方建议添加-mcmodel = large switch应修复它。 在我添加它之后,我只留下了“未定义的引用”错误,我感觉这与64/32位问题有关:

GEN     libswresample/libswresample.ver
LD      libswresample/swresample-2.dll
sed -e "s/ @[^ ]*//" libswresample/swresample-2.orig.def > libswresample/swresample-2.def; dlltool -m i386:x86-64 -d libswresample/swresample-2.def -l libswresample/swresample.lib -D swresample-2.dll
LD      libavcodec/avcodec-57.dll
libavcodec/x86/simple_idct.o:simple_idct.c:(.rdata$.refptr.ff_add_pixels_clamped_sse2[.refptr.ff_add_pixels_clamped_sse2]+0x0): undefined reference to `ff_add_pixels_clamped_sse2'
libavcodec/x86/simple_idct.o:simple_idct.c:(.rdata$.refptr.ff_put_pixels_clamped_sse2[.refptr.ff_put_pixels_clamped_sse2]+0x0): undefined reference to `ff_put_pixels_clamped_sse2'
libavcodec/x86/simple_idct.o:simple_idct.c:(.rdata$.refptr.ff_add_pixels_clamped_mmx[.refptr.ff_add_pixels_clamped_mmx]+0x0): undefined reference to `ff_add_pixels_clamped_mmx'
libavcodec/x86/simple_idct.o:simple_idct.c:(.rdata$.refptr.ff_put_pixels_clamped_mmx[.refptr.ff_put_pixels_clamped_mmx]+0x0): undefined reference to `ff_put_pixels_clamped_mmx'
collect2.exe: error: ld returned 1 exit status
make: *** [library.mak:94: libavcodec/avcodec-57.dll] Error 1

请帮忙, 感谢

2 个答案:

答案 0 :(得分:1)

根据com_create_guid

configure

因此,整个级联取决于mmx_deps="x86" mmxext_deps="mmx" sse_deps="mmxext" sse2_deps="sse" sse3_deps="sse2" ssse3_deps="sse3" sse4_deps="ssse3" sse42_deps="sse4" ... mmx_external_deps="yasm" ,但已通过开关禁用。

答案 1 :(得分:1)

您使用msys2标记了问题。如果你真的在使用MSYS2,我建议使用MSYS2开发人员提供的预编译ffmpeg软件包,你可以用pacman安装:

pacman -S mingw-w64-x86_64-ffmpeg mingw-w64-i686-ffmpeg

如果你真的需要自己从源代码构建它,你可以在这里看到MSYS2开发人员如何构建软件包:

https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-ffmpeg