1.编译环境
系统:ubuntu14.04
cmake:version 3.12.4
交叉编译链:aarch64-himix200-linux
2.依赖准备
- 32位系统兼容库
$ apt-get install lib32z1-dev lib32ncurses5
/**************************************************************
install lib32z1-dev lib32ncurses5--编译主机是64位的,缺少32位兼容库,需要先装该两个库,否则后续编译时会提示cannot found aarch64-himix200-linux,
如果安装失败,尝试更改镜像源改为阿里云源,然后再使用apt-get update与apt-get upgrade命令
****************************************************************/
- openssl(版本要求1.1以上)
$ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
$ tar -xvzf openssl-1.1.1k.tar.gz
$ apt-get install zlib zlib-devel perl-CPAN
$ cd openssl-1.1.1k
$ export PATH=/opt/aarch64-himix200-linux/bin:$PATH
$ ./config no-asm --prefix=/usr/openssl --cross-compile-prefix=aarch64-himix200-linux-
$ vi Makefile //注释掉文件中的 CNF_CFLAGS=-pthread -m64 与 CNF_CXXFLAGS=-std=c++11 -pthread -m64中的 -m64 并保存
$ make
$ make install
/**************************************************************
export PATH--将交叉编译可执行文件目录添加到环境变量
no-asm--禁用使用汇编语言加速,确保程序在所有平台上都能正常运行
prefix--指定安装路径
cross-compile-prefix--指定交叉编译工具链命令的前缀,此时实际会使用到/opt/aarch64-himix200-linux/bin/aarch64-himix200-linux-gcc
注释掉CNF_CFLAGS=-pthread -m64 与 CNF_CXXFLAGS=-std=c++11 -pthread -m64中的 -m64 是因为arm下不支持64位,不注释会在make时提示unrecognized command line option '-m64'错误
****************************************************************/
- libsrtp
下载地址:https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0
$ tar -xvzf libsrtp-2.3.0.tar.gz
$ cd libsrtp-2.3.0
$ vi configure //将5902行中的 "$cross_compiling" = yes 改为 "$cross_compiling" = no 并保存
$ ./configure --prefix=/usr/libsrtp --host aarch64-himix200-linux CC=/opt/aarch64-himix200-linux/bin/aarch64-himix200-linux-gcc
--enable-openssl --with-openssl-dir=/usr/openssl
$ make
$ make install
/**************************************************************
将5902行中的 "$cross_compiling" = yes 改为 "$cross_compiling" = no是因为arm下不支持测试程序。也可以注释掉then后的内容
prefix--指定安装路径
host--指定目标系统环境
CC--指定编译器
enable-openssl--启用openssl
with-openssl-dir--指定openssl的根目录
****************************************************************/
configure
3.编译zlmediakit
- 下载源码
$ git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
$ cd ZLMediaKit
$ git submodule update --init
- 编译
$ mkdir build
$ cd build
$ vi ../cmake/FindSRTP.cmake //注释掉两个 find_path 部分并且添加两行指令并保存,见下方
$ touch ../cmake/aarch64.cmake
$ vi ../cmake/aarch64.cmake //内容见下方
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64.cmake -DENABLE_WEBRTC=true -DENABLE_OPENSSL=true
-DOPENSSL_ROOT_DIR=/usr/openssl -DOPENSSL_LIBRARIES=/usr/openssl/lib -DCMAKE_BUILD_TYPE=Release
-DCMAKE_PREFIX_PATH="/usr/openssl"
$ cmake --build . --target MediaServer
/**************************************************************
修改FindSRTP.cmake--不修改文件指定libsrtp的头文件与库文件路径的话在编译时会寻找到正常非交叉编译版本的libsrtp路径,最后会链接失败,提示Relocations in generic ELF (EM: 62)
aarch64.cmake--交叉编译工具链cmake变量文件
DCMAKE_TOOLCHAIN_FILE--指定CMake使用的工具链文件的变量
DENABLE_WEBRTC--启用webrtc
DENABLE_OPENSSL--启用openssl
DOPENSSL_ROOT_DIR--指定openssl根目录
DOPENSSL_LIBRARIES--指定openssl库目录
DCMAKE_BUILD_TYPE--编译发布版本
DCMAKE_PREFIX_PATH--指定第三方库搜索路径
编译成功后的可执行程序在 ../release/linux/Release/ 中
****************************************************************/
FindSRTP.cmake
aarch64.cmake