1. 交叉编译环境参考:https://mp.csdn.net/console/editor/html/107692678 中RpiTools的下载和配置export
2. 下载live555代码,解压,笔者解压目录为:/home/dta14-04/code/live
3. 修改config.armlinux,主要是修改CROSS_COMPILE那行(注意1中的交叉环境配置好,执行命令:arm-linux-gnueabihf-g++ -v,结果输出准确),其内容如下:
CROSS_COMPILE?= arm-linux-gnueabihf-
COMPILE_OPTS = $(INCLUDES) -I/usr/local/include -I. -O2 -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)
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 =
4. 执行命令:./genMakefiles armlinux
5. 执行命令:make
这里报错,缺少openssl/ssl.h。 原因是没有交叉编译的openssl
6. 下载openssl并进行交叉编译
6.1 下载openssl-1.1.1g.tar.gz, 笔者解压的目录为:/home/dta14-04/code/openssl-1.1.1g
6.2 运行命令:
./Configure linux-generic32 no-asm shared no-async --prefix=/home/dta14-04/code/openssl-1.1.1g/release/raspi/ CROSS_COMPILE=/home/dta14-04/code/raspi/RpiTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-
CC=gcc
注意:linux-generic32是编译指定的位数。笔者树莓派是32位的。
--prefix是指定安目录
CROSS_COMPILE是指定交叉编译器
6.3 执行 make
6.4 执行make install。 openssl编译好的库文件就只--prefix指定的目录中。
7. 重新修改config.armlinux。 笔者这里修改指定了6中编译openssl位置。内容如下:
CROSS_COMPILE?= arm-linux-gnueabihf-
COMPILE_OPTS = $(INCLUDES) -I/home/dta14-04/code/openssl-1.1.1g/release/raspi/include -I. -O2 -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)
LIBRARY_LINK = $(CROSS_COMPILE)ar cr
LIBRARY_LINK_OPTS = $(LINK_OPTS)
LIB_SUFFIX = a
LIBS_FOR_CONSOLE_APPLICATION = -L/home/dta14-04/code/openssl-1.1.1g/release/raspi/lib -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =
dta14-04
7. 再执行命令:./genMakefiles armlinux
8. 执行命令:make clean
9. 执行命令:make ,等待编译完成。
10. 测试库。
笔者把所有的库拷贝到live下的lib目录中(包括交叉编译的openssl库)。头文件拷贝到live下的include目录中。
切换到目录:/home/dta14-04/code/live/testProgs, 测试命令行编译testOnDemandRTSPServer.cpp. 命令行如下编译成功。a.out拷贝到树莓派中,执行正常。(遇到a.out拷贝到树莓派数不能执行情况,则需要执行命令:chmod u+x a.out 赋予a.out的执行权限)
命令行编译testOnDemandRTSPServer.cpp的命令如下:
arm-linux-gnueabihf-g++ testOnDemandRTSPServer.cpp -I/home/dta14-04/code/live/include -L/home/dta14-04/code/live/lib -lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment -lcrypto -lssl
注意:编译链接库的顺序为:-lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment。顺序不对可能会报某些函数未定义的错误。没有加openssl库可能会报某些加密函数未定义的错误。