live555 交叉编译 移植到rk3588s

64 阅读1分钟

下载

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