第二次做交叉编译遇到问题,决定写个帖子记录一下方便以后自己翻看。
opencv交叉编译
编译前准备
本人使用cmake-gui进行交叉编译,需要下载安装cmake和cmake-gui
sudo apt install cmake
sudo apt-get install cmake-gui
交叉编译
进入下载好的opencv源码,此处本人使用的是opencv-3.4.16
新建 一个build文件夹
进入该文件夹后启动gui
sudo cmake-gui
Where is the source code 选择OpenCV所在目录,Where to build the binaries选择OpenCV下的build文件夹:
此处参考:https://blog.youkuaiyun.com/wjpwjpwjp0831/article/details/128269371
之后点左下角的configure,进行如图配置:
点击next,然后如图配置:
点击finish,成功后,在Search栏中搜索PREFIX, 选定安装目录到install文件夹下:
再次点击configure,点击generate。
成功后执行:
sudo make -j8
其中-j8指的是使用八个核进行编译
成功后,运行:
make install
**注意!!!:此处的opencv交叉编译不是带上ffmpeg的交叉编译,我目前还不需要这个功能
**需要的话参考:https://juejin.cn/post/7145357203107479565
报错信息汇总:
报错一:
在make的过程中报错:
ld: ../../lib/libopencv_imgcodecs.so.3.4.16: undefined reference to `png_do_expand_palette_rgb8_neon'
解决办法:
找到3rdparty/libpng/CMakeLists.txt
在最上面加上添加如下语句:
SET(ARM 1)
SET(ENABLE_NEON 1)
添加完成后重新运行
sudo cmake-gui
重新配置和生成。
ffmpeg交叉编译
为了后续的推流工作需要使用ffmpeg环境
编译前准备
apt-get install build-essential pkg-config
x264下载:git clone http://git.videolan.org/git/x264.git
ffmpeg源码下载:https://ffmpeg.org/download.html#releases
交叉编译x264
参考:https://blog.youkuaiyun.com/weixin_45824067/article/details/133465605
动态库:
./configure --prefix=/home/topeet/Documents/tool/x264arm --host=arm-linux --cross-prefix=aarch64-linux-gnu- --disable-asm --enable-shared
make -j8
sudo make install
静态库:
./configure --prefix=/home/topeet/Documents/tool/x264arm --host=arm-linux --cross-prefix=aarch64-linux-gnu- --disable-asm
make clean;make -j8
sudo make install
至此完成x264的交叉编译
交叉编译ffmpeg
tar -zxvf ffmpeg-4.2.9.tar.gz
进入:
cd ffmpeg-4.2.9
由于x264的pkgconfig不叫pkg-config,这会导致后续ffmpeg交叉编译时找不到x263的库,但是又不敢乱改文件夹名字,所以这里参考:https://blog.youkuaiyun.com/qq_25105163/article/details/107109419
编辑/etc/profile:
sudo vi /etc/profile
添加这一行:
export PKG_CONFIG_PATH=$X264_HOME/lib/pkgconfig
然后保存,执行
source /etc/profile
然后再进行带x264的ffmpeg的交叉编译:
./configure --enable-cross-compile --target-os=linux --arch=aarch64 \
--cross-prefix=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu- \
--cc=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
--cxx=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
--prefix=/home/topeet/Documents/tool/ffmpeg-4.2.9arm \
--extra-cflags=-I/home/topeet/Documents/tool/x264arm/include \
--extra-ldflags=-L/home/topeet/Documents/tool/x264arm/lib \
--disable-asm --enable-parsers --disable-decoders --enable-decoder=h264 --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc --enable-libx264 --enable-gpl
执行make命令编译,并查看是否编译成功,有无报错。
make -j$(nproc)
make install
至此完成ffmpeg的交叉编译