小白编译的过程,请指点
1.在Linux上准备交叉编译环境
1.1准备交叉编译链,文件夹名字叫Euler_compile_env_cross,申请把
1.2修改/etc/profile文件,在最后一行添加
export PATH=$PATH:/home/hy/Desktop/compile/Euler_compile_env_cross/arm/cross_compile/install/bin
我的解压目录是/home/hy/Desktop/compile/Euler_compile_env_cross,这里修改成自己的目录
1.3应用更改
source /etc/profile
我这里不允许这样,只能sudo -i /etc/profile, 但这样有弊端,保险起见,直接重启机器
1.4 重启后看是否生效
aarch64-linux-gnu-g++ -v
打印一长串东西,有版本什么的,环境就配置完成了
2. 交叉编译librtmp
2.1编译zlib
下载地址 zlib.net,我这里用的1.2.11版本
tar -xvzf zlib-1.2.11.tar.gz
cd zlib-1.2.11
CC=aarch64-linux-gnu-gcc ./configure --prefix=/usr/local/aarch64/zlib
make
sudo make install
上面的prefix是你的安装目录,要记住,到时候要拷贝文件,下同
2.2.编译openssl
下载地址 https://github.com/openssl/openssl/releases
解压:
tar -xvzf openssl-OpenSSL_1_0_2r.tar.gz
输入命令:
CC=aarch64-linux-gnu-gcc \
CXX=aarch64-linux-gnu-g++ \
AR=aarch64-linux-gnu-ar \
RANLIB=aarch64-linux-gnu-ranlib \
NM=aarch64-linux-gnu-nm \
./config shared no-asm --prefix=/usr/local/aarch64/openssl
其中shared 是动态库,no-asm是在交叉编译时不使用汇编加速
打开Makefile文件,删除所有的-m64
make
sudo make install
安装libssl-dev:
由于是EulerOS基于fedora,所以用sudo yum install openssl-devel
设置环境变量(在/etc/profile文件最后添加):
export OPENSSL=/usr/local/aarch64/openssl/bin
export PATH=$OPENSSL:$PATH:$HOME/bin
C_INCLUDE_PATH=/usr/local/aarch64/openssl/include/
export C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/aarch64/openssl/include/
export CPLUS_INCLUDE_PATH
应用环境变量修改:
sudo -i source /etc/profile
2.3.编译librtmp
下载 git clone git://git.ffmpeg.org/rtmpdump
修改rtmpdump/Makefile:
修改:
prefix=/usr/local/aarch64/librtmp
LIB_OPENSSL=-lssl -lcrypto $(LIBZ) -ldl
新增:
CROSS_COMPILE=aarch64-linux-gnu-
XCFLAGS=-I/usr/local/aarch64/openssl/lib -I/usr/local/aarch64/zlib/lib
XLDFLAGS=-L/usr/local/aarch64/openssl/lib -L/usr/local/aarch64/zlib/lib
修改rtmpdump/librtmp/Makefile:
修改:
prefix=/usr/local/aarch64/librtmp
新增:
CROSS_COMPILE=aarch64-linux-gnu-
XCFLAGS=-I/usr/local/aarch64/openssl/include -I/usr/local/aarch64/zlib/include -L/usr/local/aarch64/openssl/lib -L/usr/local/aarch64/zlib/lib
编译安装
make
sudo make install
3.交叉编译安装x264
下载 https://code.videolan.org/videolan/x264
tar -xvzf x264-master.tar.gz
cd x264-master
./configure \
--prefix=/usr/local/aarch64/x264 \
--host=aarch64-linux \
--cross-prefix=aarch64-linux-gnu- \
--enable-shared \
--enable-static
make
sudo make install
4.交叉编译ffmpeg
4.1下载源码,我这里用的4.2.3版本
tar -jxvf ffmpeg-4.2.3.tar.bz2
修改/etc/profile,添加一行:
export PKG_CONFIG_PATH=/usr/local/aarch64/librtmp/lib/pkgconfig:/usr/local/aarch64/openssl/lib/pkgconfig:/usr/local/aarch64/x264/lib/pkgconfig:$PKG_CONFIG_PATH
写完别忘了sudo -i source /etc/profile
4.2编译安装aarch64版本ffmpeg
进入ffmpeg解压目录
./configure \
--prefix=/usr/local/aarch64/ffmpeg \
--target-os=linux \
--arch=aarch64 \
--enable-cross-compile \
--cross-prefix=aarch64-linux-gnu- \
--enable-shared \
--disable-doc \
--enable-libx264 \
--enable-openssl \
--enable-librtmp \
--enable-gpl --enable-nonfree --pkg-config=pkg-config
make
sudo make install
假如提示 /bin/sh: aarch64-linux-gnu-ranlib: command not found, 参见第一步
5. 在Atlas500上测试
新建目录, 就叫ffmpeg把,放到哪里无所谓
进入/usr/local/aarch64目录,这里有我们编译好的x264,zlib,openssl,ffmpeg,librtmp,把对应的bin目录和lib目录里面
的可执行文件(bin目录的执行文件,lib目录的动态库),统统拷贝到刚创建的ffmpeg目录
想办法把ffmpeg目录放到Atlas500上面去(可以用nfs进行共享,如何共享,有需要的小伙伴可以留言,这里就不说了),
为了能在任何地方都能输入ffmpeg命令,我们把ffmpeg目录加入到环境变量(/etc/profile)
export PATH=/opt/ffmpeg:$PATH
假设我们把linux的ffmpeg目录拷贝到了Atlas上的/opt/ffmpeg目录
sudo -i source /etc/profile
现在,输入ffmpeg命令测试把