歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在Ubuntu中用Android NDK編譯FFmpeg

在Ubuntu中用Android NDK編譯FFmpeg

日期:2017/2/28 16:07:07   编辑:Linux教程

首先參考http://www.linuxidc.com/Linux/2011-09/42691.htm,基於他的基礎上進行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, 所以才產生了以上的問題。

Copyright © Linux教程網 All Rights Reserved