编译裁剪参考:
基于上述极大化的编译裁剪,最终得到了三个加起来大小在1M左右的库, 虽然跟编译全开时的几十M相比已经裁剪了非常多了。
但在嵌入式环境中(FLASH只有32M甚至更小), 1M的大小还是不行的,这时需要直接去看懂源码, 基于源码进行删减。
我们项目就是基于源码进行删减,最终只编出了一个命名为libffmpeg.so的库,大小只有200多KB。
这个需要很强的功底,也费时间的,这里我只提供一个思路。
我们在make的时候,看到类似如下的信息:
CC libavformat/allformats.o
CC libavformat/avc.o
CC libavformat/avienc.o
CC libavformat/avio.o
CC libavformat/aviobuf.o
CC libavformat/cutils.o
CC libavformat/file.o
CC libavformat/format.o
CC libavformat/id3v1.o
CC libavformat/id3v2.o
libavformat/id3v2.c: In function ‘id3v2_parse’:
libavformat/id3v2.c:667:23: warning: variable ‘dlen’ set but not used [-Wunused-but-set-variable]
unsigned long dlen;
^
libavformat/id3v2.c:617:9: warning: unused variable ‘uncompressed_buffer_size’ [-Wunused-variable]
int uncompressed_buffer_size = 0;
^
CC libavformat/isom.o
CC libavformat/metadata.o
CC libavformat/mov_chan.o
CC libavformat/movenc.o
CC libavformat/movenchint.o
CC libavformat/mux.o
CC libavformat/options.o
CC libavformat/os_support.o
CC libavformat/riff.o
CC libavformat/riffenc.o
CC libavformat/rtp.o
CC libavformat/rtpenc_chain.o
CC libavformat/sdp.o
CC libavformat/seek.o
CC libavformat/url.o
CC libavformat/utils.o
我们据此可知, 最终编译入库的,只有上述这些.o对应的.c文件
以此为出发点, 只保留编译出现的.c文件和最终输出的头文件, 这样一来范围一下就大大缩减。
接着就是看懂保留下来的源码, 进行源码的更改删除了。。。。。。。。
(PS: 等后面我有时间弄了,我在更新具体源码裁剪流程和遇到的问题)