在Ubuntu中用Android NDK编译FFmpeg
2011-05-18 21:48
423 查看
首先感谢来自Scott Wong的文章http://archive.cnblogs.com/a/1909455/,基于他的基础上进行FFmpeg的编译,让我节省了大量了时间。
我在编译的过程上遇到了一些新的问题并解决了,在此记上,如果有其它的朋友也遇到,可能会有些帮助。
我编译的ffmpeg的源代码直接来自于http://ffmpeg.org/download.html上的git服务器:git://github.com/FFmpeg/FFmpeg.git,应该是ffmpeg最新的代码。
所用的Android NDK为:Android NDK r5
PC系统为:Ubuntu 10.04 32版本
按照Scott所写的增加系列mk文件以及对libm.h进行修改,并生成及修改config.h后,开始尝试编译,一直到最后链接时出现以下的问题:
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavutil.a(inverse.o):(.rodata+0x0): multiple definition of `ff_inverse'
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavcodec.a(inverse.o):(.rodata+0x0): first defined here
查看后发现:
在目录libavcodec下有文件inverse.c,内容为:
#include "libavutil/inverse.c"
而libavutil下的inverse.c中定义了变量ff_inverse,所以在libavutil.a与libavcodec.a中都存在变量ff_inverse的定义,当这二个文件一起链接成libffmpeg.so时,就出现了上面的问题。
了解了原因,解决办法就很简单,直接修改libavcodec/Makefile,把下面一行删掉:
OBJS-$(!CONFIG_SMALL) += inverse.o
那么这是不是ffmpeg的一个问题呢?应该不是,因为它的编译目标为libavutil.so, libavcodec.so,也就是说都是独立的小的so文件,而我们这边是最终产生一个统合的文件libffmpeg.so,其中包含了libavutil.a, libavcodec.a, 所以才产生了以上的问题。
我在编译的过程上遇到了一些新的问题并解决了,在此记上,如果有其它的朋友也遇到,可能会有些帮助。
我编译的ffmpeg的源代码直接来自于http://ffmpeg.org/download.html上的git服务器:git://github.com/FFmpeg/FFmpeg.git,应该是ffmpeg最新的代码。
所用的Android NDK为:Android NDK r5
PC系统为:Ubuntu 10.04 32版本
按照Scott所写的增加系列mk文件以及对libm.h进行修改,并生成及修改config.h后,开始尝试编译,一直到最后链接时出现以下的问题:
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavutil.a(inverse.o):(.rodata+0x0): multiple definition of `ff_inverse'
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavcodec.a(inverse.o):(.rodata+0x0): first defined here
查看后发现:
在目录libavcodec下有文件inverse.c,内容为:
#include "libavutil/inverse.c"
而libavutil下的inverse.c中定义了变量ff_inverse,所以在libavutil.a与libavcodec.a中都存在变量ff_inverse的定义,当这二个文件一起链接成libffmpeg.so时,就出现了上面的问题。
了解了原因,解决办法就很简单,直接修改libavcodec/Makefile,把下面一行删掉:
OBJS-$(!CONFIG_SMALL) += inverse.o
那么这是不是ffmpeg的一个问题呢?应该不是,因为它的编译目标为libavutil.so, libavcodec.so,也就是说都是独立的小的so文件,而我们这边是最终产生一个统合的文件libffmpeg.so,其中包含了libavutil.a, libavcodec.a, 所以才产生了以上的问题。
相关文章推荐
- 在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)
- ubuntu中使用android ndk编译ffmpeg.
- 【android NDK及JNI】ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题 .
- 在Ubuntu中用Android NDK编译FFmpeg
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3
- Ubuntu 10.10 64bit下使用Android NDK r6编译FFmpeg 0.8.1
- 在Ubuntu中用Android NDK编译FFmpeg
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3
- 在Ubuntu中用Android NDK编译FFmpeg
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3
- 在Ubuntu中用Android NDK编译FFmpeg
- 在Ubuntu中用Android NDK编译FFmpeg
- 在Ubuntu中用Android NDK编译FFmpeg
- Ubuntu 12.04中Android NDK r8d 编译 FFmpeg 0.11.1 并使用
- Ubuntu 10.10 64bit下使用Android NDK r6编译FFmpeg 0.8.1
- 在Ubuntu中用Android NDK编译FFmpeg(已经验证没有任何问题!2011.06.1)
- 在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3
- 在 Ubuntu 下使用 Android NDK r4b 编译 FFmpeg 0.6.3