x264各个版本下载 http://download.videolan.org/pub/videolan/x264/snapshots/
ffmpeg 各个版本下载 http://ffmpeg.org/releases/
基本可以按照时间进行ffmpeg与x264版本选择对应
1, 到http://www.videolan.org/developers/x264.html下载264编码库last_x264.tar.bz2
tar -xjf last_x264.tar.bz2添加 /usr/local/x264/lib/
4, 查看是否有264编码器
ffmpeg -encoders |grep 264
5,注意: 如果在某参机子上编译的ffmpeg库, 放到另一台机子用时. 最好--disable-autodetect, 不然ffmpeg会自动检测原机子上的安装情况, 有可能原机子上装了很多软件. 导致此库移到目标机子上用时, 目标机因为少了很多库而非常麻烦. 比如报下面错:
用了--disable-autodetect就不用编译不需要的项。不然要自己添加 --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-libxcb-shape --disable-d3d11va --disable-libdrm --disable-dxva2 --disable-vaapi
问题与解决:
1,
[root@localhost monitor]# g++ -o Release/FaceMonitor -Wl,-gc-sections -L/usr/local/lib -L/usr/local/lib/poco -L/usr/local/lib/FaceSDK/Release -L/lib64 -L/usr/local/lib/Poco -L/usr/local/ffmpeg-3.1/lib/ -L/usr/local/x264_for_ffmpeg_3.1/lib -Wl,--start-group Release/FaceRecognitionThread.o Release/FaceSAThread.o Release/H264DecoderThread.o Release/main.o Release/NotificationThreads.o Release/VideoFaceDetectionThread.o Release/VideoFaceRecApp.o Release/DBLoader.o Release/FaceMonitorMessage.o Release/FaceRecognition.o Release/GetIP.o Release/stringhelper.o Release/UTF8Converter.o Release/utility.o -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_legacy -lopencv_objdetect -lopencv_nonfree -lPocoFoundation -lPocoUtil -lPocoNet -lPocoJSON -lPocoData -lPocoDataSQLite -lPocoDataMySQL -lpthread -lrt -lCKLAgePredictor -lCKLFaceCrop -lCKLFaceRecognizer -lCKLFaceTracking -lCKLGenderPredictor -lCKLPointDetector -lSeetaFaceDetection -lSeetaFaceAlignment -lblas -llapack -larmadillo -lboost_thread -lboost_system -ltacopie -lcpp_redis -lavformat -lavcodec -lavutil -lswscale -lswresample -lavcodec -lavdevice -lx264 -ldl -lm -lz -Wl,--rpath='$ORIGIN' -fopenmp -Wl,--end-group
/usr/bin/ld: Release/H264DecoderThread.o: undefined reference to symbol 'avcodec_open2@@LIBAVCODEC_57'
/usr/bin/ld: note: 'avcodec_open2@@LIBAVCODEC_57' is defined in DSO /usr/local/ffmpeg-3.1/lib/libavcodec.so.57 so try adding it to the linker command line
/usr/local/ffmpeg-3.1/lib/libavcodec.so.57: could not read symbols: 无效的操作
collect2: 错误:ld 返回 1
已经加了-lavcodec, 却始终报找不到. 原因是在/usr/local/lib下还有个静态库libavcodec.a 将这个静态库删除后正常.
一般情况下都是多版本库冲突问题. 注意在/usr/local/lib下不要放ffmpeg库
查了很多资料,总结了以下几种可能的原因:
1、链接时缺少相关的目标文件(.o)7、头文件和你的库文件不匹配(你安装了多个版本的ffmpeg时);
8、路径、需要的库包含不全。
对于第七类问题,参考https://github.com/MaartenBaert/ssr/issues/215,执行locate -b libavcodec.so你会发现有许多的对应的动态文件输出,当你在.pro添加库文件路径时,并不能确定链接的是动态库还是静态库,我添加路径的时候是静态库(.a)的路径,但是实际上链接的确是动态库的文件(.so)。
2, 在release.mak里只连接静态库方法:将ffmpeg与x264的动态库保存到新建目录so_bak下. 让编译器只能找到静态库.