未定义的引用'ff_put_pixels_clamped_mmx'

问题描述:

我有一个Windows 8.1 64位,英特尔i7。 我想从源代码生成ffmpeg动态库(dll),版本3.2.4为此,我克隆了ffmpeg git存储库,并签出标签n3.2.4 我在windows 8.1中安装了mingw64,打开了一个mingw64 shell。 我建设,用下面的开关之前跑“配置”命令:未定义的引用'ff_put_pixels_clamped_mmx'

./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 =大的开关,如某些地方建议应该修复它。 后,我加入了,我只剩下了“未定义的引用”错误,我有一个相关的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 

请帮帮忙,谢谢

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" 

所以,整个级联取决于yasm但一直通过开关禁用。

+0

谢谢!这似乎是问题。但是,由于某种原因,我的应用程序与它链接无法运行,并引发以下错误:程序无法启动,因为libiconv-2.dll从您的计算机中丢失 –

您用msys2标记了该问题。如果你真的使用MSYS2,我会建议使用由MSYS2开发者,你可以使用pacman安装所提供的预编译的ffmpeg包:如果你真的需要自己从源码编译

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

,你可以看到该软件包是由MSYS2开发人员在这里构建的:

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

+0

谢谢,但我需要构建一个特定版本 - n3.2.4 –