下载live555最新源码:http://www.live555.com/liveMedia/public/live555-latest.tar.gz
如果是要下载具体的live555版本,比如2023.06.14发布的版本,则可以浏览器输入:http://www.live555.com/liveMedia/public/live.2023.06.14.tar.gz
查看我们交叉编译工具的所在路径。可以看到我们的交叉编译工具名称为aarch64-linux-gnu-XXX
针对我们的交叉编译工具,设置环境变量export PATH=XXX:$PATH
通过命令echo $PATH,查看环境变量是否设置成功:
解压我们下载下来的live.XXX.tar.gz,得到live目录,进入该目录。
修改编译配置文件:
vim config.armlinux
将CROSS_COMPILE这行改为:
CROSS_COMPILE= aarch64-linux-gnu-
增加一行指定live555的安装路径:
PREFIX=/home/cjc/company/Sunmnet/xiangmu2/trunk/common/live/install
将COMPILE_OPTS这行改为:
COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -std=c++11 -fPIC
1.其中如果不添加选项-DNO_OPENSSL=1,则编译可能会报找不到openssl的问题
2.如果不添加选项-std=c++11,则编译可能会报错:
RTSPCommon.cpp: 在函数‘const char* dateHeader()’中:
RTSPCommon.cpp:364:34: 错误: ‘nullptr’在此作用域中尚未声明
if (gmtime_r(&tt, &time_tm) == nullptr) {
3.如果不添加选项-fPIC,则使用编译出来的live555库时,可能会报错:
relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `stderr@@GLIBC_2.17' can not be used when making a shared object; recompile with -fPIC
修改完config.armlinux,该文件可能如下所示:
保存config.armlinux内容,退出编辑该文件,然后控制台输入命令:
./genMakefiles armlinux
make
make install
我们可以发现生成了live555的可执行文件,头文件和库(静态库)文件了。
如果我们使用live555的库,链接的时候我们得按照如下顺序:
-lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment
否则可能会报错:undefined reference to......
这是因为在给编译器输入源文件,目标文件或者动态库静态库文件时,如果B文件依赖A文件中的内容,那么B文件应该放在A文件的左边。
参考:
《LIVE555 交叉编译》
《分析live555源码第3集:UsageEnvironment_version.hh之live555的版本信息》