当前位置: 代码迷 >> 综合 >> Ubuntu 交叉编译 live555(树莓派上使用的库)
  详细解决方案

Ubuntu 交叉编译 live555(树莓派上使用的库)

热度:5   发布时间:2024-02-04 17:40:33.0

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

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库可能会报某些加密函数未定义的错误。

  相关解决方案