记录一次ffmpeg编译
网上搜的linux编译都是xxxx,懒得说了
不知道为什么ffmpeg-4.2.2
下我使用最大量编译都无法编译出include、lib
等文件夹
configurion的封装脚本:
#!/bin/bash
if [ ! -d build ];then
mkdir build
fi
./configure \
--prefix=build \
--enable-shared \
--disable-asm \
--disable-doc \
--disable-network \
--disable-ffprobe \
--disable-ffplay \
执行configurion+make后的发现ffmpeg报错找不到so
~/ffmpeg-4.2.2 $ ./ffmpeg
./ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
先不管它,遇到问题一个个解决,找到了根源就好办了
在ffmpeg-4.2.2
目录下用find . -name "*.so"
找了一下发现对于的so都在对应的模块里面
~/ffmpeg-4.2.2 $ find . -name "*.so"
./libavdevice/libavdevice.so
./libswscale/libswscale.so
./libavformat/libavformat.so
./libswresample/libswresample.so
./libavfilter/libavfilter.so
./libavutil/libavutil.so
./libavcodec/libavcodec.so
编写调用ffmpeg库api的源文件:
https://github.com/lokenetwork/FFmpeg-Principle/blob/main/input/main.c
手动指定路径编译
gcc main.c -w -I ffmpeg-4.2.2 -L./ffmpeg-4.2.2/libavformat -lavformat -L./ffmpeg-4.2.2/libavutil -lavutil
(编译是可以编译的,但是还不能运行)
~ $ ./a.out
./a.out: error while loading shared libraries: libavformat.so.58: cannot open shared object file: No such file or directory
然后手动添加动态库路径到变量中
~ $ export LD_LIBRARY_PATH=~/ffmpeg-4.2.2/libavformat:~/ffmpeg-4.2.2/libavcodec:~/ffmpeg-4.2.2/libavutil:~/ffmpeg-4.2.2/libswresample
ok,可以运行了。经过前面的分析最终的暂时提出下面解答方法
我暂时的解决方法是将全部so文件手动转移到一个目录下来(注意改路径)
cd ffmpeg-4.2.2
mkdir lib
cp $(find . -name "*.so*") ./lib/
export LD_LIBRARY_PATH=~/ffmpeg-4.2.2/lib
然后编译
gcc main.c -w -I ffmpeg-4.2.2 -L./ffmpeg-4.2.2/lib -lavformat -lavutil
然后就可以正常执行了