未定义的引用'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
但一直通过开关禁用。
答
您用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 –
谢谢!这似乎是问题。但是,由于某种原因,我的应用程序与它链接无法运行,并引发以下错误:程序无法启动,因为libiconv-2.dll从您的计算机中丢失 –