ffmpeg静态链接
在音频视频编解码中,经常使用ffmpeg库。平时都是使用的动态库,但是动态库有一个缺点,就是程序运行时才进行加载。如果你需要经常移植的情况下,每次都需要重新的编译动态库,比较麻烦。并且,如果你使用的库只有你自己的程序使用时,那么系统只会有一个副本,所以动态库的优点并没有体现出来,倒不如使用静态库省事。
但是直接修改原来的makefile以后,发现并不能正常运行,链接时候出现了很多undefined reference to的错误,差了很多资料以后,发现了问题主要是下面这种原因:
- 链接时候,需要指定目录,目录下不要存在动态库,在linux系统中,程序会优先链接动态库。
- 多个库的链接顺序的问题,这点很重要,动态库不会存在这个问题
- 版本问题,ffmpeg的版本兼容是一个很大的问题
- 头文件要include准确
对于视频解码,我修改以后的makefile如下所示:
1 CC = g++
2 Cflag = -g
3 SRC = $(wildcard *.cpp)
4 OBJS = $(patsubst %cpp, %o, $(SRC))
5 HEADER = $(wildcard ../include/*.h)
6 Lib = -lavformat -lavdevice -lavcodec -lavutil -lpthread -lswscale -lswresample -lz -lm -lbz2 -llzma
7 Lib2=-ldl -lrt
8