下载
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
解压
tar xf live555-latest.tar.gz
切换到源码目录
cd live
准备配置文件
在 config.armlinux 基础上改
cp config.armlinux config.armlinux-rk3588s
给 config.armlinux-rk3588s 增加写入权限
chmod u+w config.armlinux-rk3588s
编辑 config.armlinux-rk3588s,写入以下内容
PREFIX = /home/lingke/projects/rk3588s_install_path/live555
CROSS_COMPILE?= aarch64-rockchip1031-linux-gnu-
COMPILE_OPTS = $(INCLUDES) -I/home/lingke/projects/rk3588s_install_path/openssl/include -I. -O2 -DNO_STD_LIB -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C = c
C_COMPILER = $(CROSS_COMPILE)gcc
C_FLAGS = $(COMPILE_OPTS)
CPP = cpp
CPLUSPLUS_COMPILER = $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1
OBJ = o
LINK = $(CROSS_COMPILE)g++ -o
LINK_OPTS =
CONSOLE_LINK_OPTS = $(LINK_OPTS) -L/home/lingke/projects/rk3588s_install_path/openssl/lib64
LIBRARY_LINK = $(CROSS_COMPILE)ar cr
LIBRARY_LINK_OPTS = $(LINK_OPTS)
LIB_SUFFIX = a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =
生成Makefile
./genMakefiles armlinux-rk3588s
编译
make -j
安装
make install
编译报错及解决办法
报错1
aarch64-rockchip1031-linux-gnu-g++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 MPEG4VideoStreamFramer.cpp
In file included from include/RTPInterface.hh:30,
from include/RTPSource.hh:28,
from include/MultiFramedRTPSource.hh:26,
from include/MPEG4LATMAudioRTPSource.hh:25,
from MPEG4VideoStreamFramer.cpp:28:
include/TLSState.hh:34:10: fatal error: openssl/ssl.h: No such file or directory
34 | #include <openssl/ssl.h>
| ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:33: MPEG4VideoStreamFramer.o] Error 1
make[1]: Leaving directory '/home/lingke/projects/live/liveMedia'
make: *** [Makefile:36: all] Error 2
交叉编译openssl,已安装在这个目录 /home/lingke/projects/rk3588s_install_path/openssl
(base) lingke@yjzx:~/projects/rk3588s_install_path/openssl$ tree -L 2 .
.
├── bin
│ ├── c_rehash
│ └── openssl
├── include
│ └── openssl
├── lib64
│ ├── cmake
│ ├── engines-3
│ ├── libcrypto.a
│ ├── libcrypto.so -> libcrypto.so.3
│ ├── libcrypto.so.3
│ ├── libssl.a
│ ├── libssl.so -> libssl.so.3
│ ├── libssl.so.3
│ ├── ossl-modules
│ └── pkgconfig
├── share
│ ├── doc
│ └── man
└── ssl
├── certs
├── ct_log_list.cnf
├── ct_log_list.cnf.dist
├── misc
├── openssl.cnf
├── openssl.cnf.dist
└── private
15 directories, 12 files
指定 include 和 lib 路径
COMPILE_OPTS = $(INCLUDES) -I/home/lingke/projects/rk3588s_install_path/openssl/include -I. -O2 -DNO_STD_LIB -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
CONSOLE_LINK_OPTS = $(LINK_OPTS) -L/home/lingke/projects/rk3588s_install_path/openssl/lib64
报错2
aarch64-rockchip1031-linux-gnu-g++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/home/lingke/projects/rk3588s_install_path/openssl/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 BasicTaskScheduler.cpp
BasicTaskScheduler.cpp: In member function ‘virtual void BasicTaskScheduler::SingleStep(unsigned int)’:
BasicTaskScheduler.cpp:191:40: error: ‘struct std::atomic_flag’ has no member named ‘test’
191 | if (fTriggersAwaitingHandling[i].test()) {
| ^~~~
make[1]: *** [Makefile:42: BasicTaskScheduler.o] Error 1
make[1]: Leaving directory '/home/lingke/projects/live/BasicUsageEnvironment'
make: *** [Makefile:39: all] Error 2
BasicTaskScheduler.cpp 191 行处源码
#ifndef NO_STD_LIB
if (fTriggersAwaitingHandling[i].test()) {
fTriggersAwaitingHandling[i].clear();
#else
if (fTriggersAwaitingHandling[i]) {
fTriggersAwaitingHandling[i] = False;
#endif
由于进入了第一个分支导致报错,所以需要定义 NO_STD_LIB ,让其走第二个分支
-DNO_STD_LIB
编辑 config.armlinux-rk3588s,增加 -DNO_STD_LIB
COMPILE_OPTS = $(INCLUDES) -I/home/lingke/projects/rk3588s_install_path/openssl/include -I. -O2 -DNO_STD_LIB -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64