安装交叉编译链,并配置环境变量验证—教程很多
配置上环境变量后,可查看编译命令
zycxvm00x@Ubuntu16-040:~$ arm
arm2hpdl arm-himix200-linux-gcov
arm-himix200-linux-addr2line arm-himix200-linux-gcov-tool
arm-himix200-linux-ar arm-himix200-linux-gdb
arm-himix200-linux-as arm-himix200-linux-gprof
arm-himix200-linux-c++ arm-himix200-linux-ld
arm-himix200-linux-c++filt arm-himix200-linux-ld.bfd
arm-himix200-linux-cpp arm-himix200-linux-nm
arm-himix200-linux-elfedit arm-himix200-linux-objcopy
arm-himix200-linux-g++ arm-himix200-linux-objdump
arm-himix200-linux-gcc arm-himix200-linux-ranlib
arm-himix200-linux-gcc-6.3.0 arm-himix200-linux-readelf
arm-himix200-linux-gcc-ar arm-himix200-linux-size
arm-himix200-linux-gcc-nm arm-himix200-linux-strings
arm-himix200-linux-gcc-ranlib arm-himix200-linux-strip
在Linux 平台做FFMPEG视频编码的程序时,需要安装解码库。以H264编解码为例,我们需要先安装X264库:
(1)下载X264 : Git clone https://code.videolan.org/videolan/x264.git
(2)安装X264: cd /x264
CC=arm-himix200-linux-gcc ./configure \
--host=arm-himix200-linux \
--prefix=/opt/ffmpeg-hisi/x264_hisi \
--cross-prefix=arm-himix200-linux- \
--enable-static \
--enable-shared \
--disable-asm
(3) make && make install
找不到arm-himix200的编译链,需要下载32位的库
sudo apt install lib32z1-dev
install的时候需要进入到root权限下进行instal,并且在root下配置环境变量
su root
export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH
make install
(4) export LD_LIBRARY_PATH=/opt/ffmpeg-hisi/x264_hisi/lib:$LD_LIBRARY_PATH
(5) export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ffmpeg-hisi/x264_hisi/lib/pkgconfig
(6) export PATH=/opt/ffmpeg-hisi/x264_hisi//bin:$PATH
(7) 验证安装:cd /opt/ffmpeg-hisi/x264_hisi 查看是否是bin lib include等文件夹
2. 安装ffmpeg-3.4.9 cd ffmpeg-3.4.9
./configure \
--prefix=/opt/ffmpeg-hisi/ffmpeg_hisi/ \
--enable-avresample \
--enable-cross-compile \
--cross-prefix=arm-himix200-linux- \
--arch=arm \
--target-os=linux \
--enable-gpl \
--enable-shared \
--enable-static \
--enable-libx264 \
--extra-cflags=-I/opt/ffmpeg-hisi/x264_hisi/include \
--extra-ldflags=-L/opt/ffmpeg-hisi/x264_hisi/lib
make -j8 && make install
验证安装:cd /opt/ffmpeg-hisi/ffmpeg_hisi 查看是否是bin lib include等文件夹
export LD_LIBRARY_PATH=/opt/ffmpeg-hisi/ffmpeg_hisi/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ffmpeg-hisi/ffmpeg_hisi/lib/pkgconfig
export PATH=/opt/ffmpeg-hisi/ffmpeg_hisi/bin:$PATH
安装opencv-4.2.0 opencv_contrib-4.2.0
将这个两个解压放到同级目录 mkdir build && cd build
执行 OPENCV_EXTRA_MODULES_PATH:路径换成自己的
修改cmakelist.txt:560行添加ocv_include_directories(./3rdparty/zlib)
最好把try_complie验证的错误打印打开就是 message(FATAL_ERROR “FFMPEG: test check build log:\n${TRY_OUT}”)这句话。
在opencv-4.2.0/modules/videoio/cmake,需要修改detect_ffmpeg.cmake
test.cpp错误验证也在这里
find ffmpeg
set(HAVE_FFMPEG TRUE)
set(FFMPEG_DIR /opt/ffmpeg-hisi/ffmpeg_hisi)
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_DIR}/include)
set(FFMPEG_LIBRARY_DIRS ${FFMPEG_DIR}/lib)
set(FFMPEG_LIBRARIES avcodec avformat avutil swscale x264 avresample avdevice avfilter postproc swresample)
message(STATUS "FFMPEG_INCLUDE_DIR: ${FFMPEG_INCLUDE_DIRS}")
message(STATUS "FFMPEG_LIBRARY_DIRS: ${FFMPEG_LIBRARY_DIRS}")
message(STATUS "FFMPEG_LIBRARIES: ${FFMPEG_LIBRARIES}")
如果出现找不到ffmpeg的动态库,
需要在编译test.cpp的后面加上
“-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_DIRS}”
例如,在这里修改
#==================================
if(HAVE_FFMPEG AND NOT HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
set(HAVE_FFMPEG TRUE)
set(FFMPEG_DIR /opt/ffmpeg-hisi/ffmpeg_hisi)
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_DIR}/include)
set(FFMPEG_LIBRARY_DIRS ${FFMPEG_DIR}/lib)
set(FFMPEG_LIBRARIES avcodec avformat avutil swscale x264 avresample avdevice avfilter postproc swresample)
message("detec_ffmpeg.cmake-----xxxxxxxxxxxxxx--")
message(STATUS "WITH_FFMPEG: ${WITH_FFMPEG}")
message(STATUS "HAVE_FFMPEG: ${HAVE_FFMPEG}")
message(STATUS "FFMPEG_INCLUDE_DIR: ${FFMPEG_INCLUDE_DIRS}")
message(STATUS "FFMPEG_LIBRARY_DIRS: ${FFMPEG_LIBRARY_DIRS}")
message(STATUS "FFMPEG_LIBRARIES: ${FFMPEG_LIBRARIES}")
try_compile(__VALID_FFMPEG
"${OpenCV_BINARY_DIR}"
"${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
"-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_DIRS}"
"-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
OUTPUT_VARIABLE TRY_OUT
)
if(NOT __VALID_FFMPEG)
message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
message(STATUS "WARNING: Can't build ffmpeg test code")
set(HAVE_FFMPEG FALSE)
endif()
endif()
#==================================
如果cmake验证ffmpeg的test.cpp还是出现错误,需要把x264拷贝ffmpeg目录下
然后重新执行cmake指令
cmake -DOPENCV_EXTRA_MODULES_PATH=/home/zycxvm00x/cross_file/opencv-4.2.0/opencv_contrib-4.2.0/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.2.0/ \
-D with-contrib=ON \
-DCMAKE_BUILD_TYPE=Release \
-D WITH_MATLAB=OFF \
-D WITH_CUDA=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D CUDA_USE_STATIC_CUDA_RUNTIME=OFF \
-D HAVE_FFMPEG=ON \
-D WITH_FFMPEG=ON \
-D CMAKE_TOOLCHAIN_FILE=../himix200.toolchain.cmake \
-DBUILD_opencv_xfeatures2d=OFF -DWITH_PROTOBUF=OFF \
-D FFMPEG_INCLUDE_DIR=/opt/ffmpeg-hisi/ffmpeg_hisi/include \
-D FFMPEG_LIB_DIR="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
-D FFMPEG_CODEC_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
-D FFMPEG_FORMAT_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
-D FFMPEG_RESAMPLE_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
-D FFMPEG_SWSCALE_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
-D FFMPEG_UTIL_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
..
himix200.toolchain.cmake就是指定的交叉编译链,可自行修改
make -j8
如果出现libopencvcore.so生成失败,需要在编译目录下找到CMakeCache.txt,修改BUILD_ZLIB:BOOL=ON,这是为了用32位编译链去生成lib库
make install
最后如果opencv make -j8安装出错,出现未定义的引用,找不到ffmpeg相关的.so,需要把对应的X264以及ffmpeg相关的.so都拷贝到对应编译链的lib目录下