Android 为什么ndk构建ffmpeg时出错?

Android 为什么ndk构建ffmpeg时出错?,android,android-ndk,ffmpeg,Android,Android Ndk,Ffmpeg,我曾尝试在Windows7中为Android构建ffmpeg,但在ndk构建时出错 错误日志如下所示: Wun@Wun-PC ~/ffmpeg/jni/ffmpeg $ ndk-build SharedLibrary : libffmpeg.so C:/cygwin/home/Wun/ffmpeg/obj/local/armeabi/libavcodec.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab' C:/c

我曾尝试在Windows7中为Android构建
ffmpeg
,但在
ndk构建时出错

错误日志如下所示:

Wun@Wun-PC ~/ffmpeg/jni/ffmpeg
$ ndk-build
SharedLibrary  : libffmpeg.so
C:/cygwin/home/Wun/ffmpeg/obj/local/armeabi/libavcodec.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab'
C:/cygwin/home/Wun/ffmpeg/obj/local/armeabi/libavformat.a(log2_tab.o):(.rodata+0x0): first defined here
C:/cygwin/home/Wun/ffmpeg/obj/local/armeabi/libavutil.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab'
C:/cygwin/home/Wun/ffmpeg/obj/local/armeabi/libavformat.a(log2_tab.o):(.rodata+0x0): first defined here
collect2: ld returned 1 exit status
/home/Wun/android-ndk-r8b/build/core/build-binary.mk:378: recipe for target '/home/Wun/ffmpeg/obj/local/armeabi/libffmpeg.so' failed
make: *** [/home/Wun/ffmpeg/obj/local/armeabi/libffmpeg.so] Error 1
我已经删除了
OBJS-$(配置共享)+=log2\u tab.o
libavformat
libavcodec
Makefile

但问题还是发生了

我是否应该删除
libavcodec.a、libavformat.a、libavutil.a和libswscale.a
,然后再次重建

有人知道如何解决这个问题吗

提前谢谢


这个问题在交叉编译场景中已经出现过不止一次

这是一个好主意。对于gcc,您应该运行

./configure … --extra-cflags="-DHAVE_ISNAN -DHAVE_ISINF"
您也可以将其添加到Android.mk中:

LOCAL_CFLAGS += "-DHAVE_ISNAN -DHAVE_ISINF"

由于您不运行
/configure
,因此可以编辑
config.h
文件并设置以下两项:

#define HAVE_ISNAN=1
#define HAVE_ISINF=1

我在每个Android.mk添加
LOCAL\u CFLAGS+=“-DHAVE\u ISNAN-DHAVE-ISINF”
。错误没有解决,它显示了
config.h:131:0:warning:“HAVE_ISNAN”重新定义[默认启用]:0:0:注意:这是以前定义的位置
。我引用了链接,但我不知道如何为GCC添加
--extra cflags=“-DHAVE_ISNAN-DHAVE-ISINF”
?好的,让我们只尝试一下LOCAL_cflags+=-DHAVE-ISINF
。如果这不能解决问题,请发布您的
config.h`文件。您确定问题出在
HAVE_ISNAN和DHAVE-ISINF
。我在错误日志中没有看到任何关于
HAVE_ISNAN和DHAVE-ISINF
的参数…我发现了问题,我只删除了
libm.h
中的“static”。它应该删除
libm.h
中的所有静态方法。而且效果很好。