需求:
1. 纯静态编译ffmpeg ,即ldd ./ffmpeg 的结果是:not a dynamic executable
2. 修改ffmpeg 项目,添加自定义功能库
3. 自定义库由c++实现,要求能被纯c的ffmpeg项目调用
4. 自定义库必须使用g++ 的一些高级特性编译,要求g++支持c++11
5. 自定义库使用了pthread库 和openmp 库
6. 自定义库使用了opencv 3.0.0库,
7. 禁用所有的图形显示库x11,xcb,声音设备avdevice等等,静态链接这些库,会很痛苦。
动手之前需要注意:
A. ffmpeg.org (CentOS或 Ubuntu)的方法是不能达到需求1的,因为它大量使用包管理软件(yum 或apt-get)安装一些ffmpeg的依赖库,而这些依赖库大多是动态版本(.so.*) 。这就使得编译ffmpeg时,无法静态链接这些依赖库。因而,非开发工具(如gcc g++ pkg-config aotoconf etc )的依赖库(如ass,freetype,sdl theora, jpeg png,etc),需要手动下载它们的源码(以及这些依赖库的依赖库),然后编译得到静态库(.a)。一般来说,这些依赖库多数是configure 配置,然后make,make install。
./configure *** --enable-shared=no --enable-static=yes --with-***=/dir
B.自定义功能库也类似于上述方法写好myfunc.cpp,然后g++编译&