系统平台:Ubuntu 16.04
开发板:gec6818 ARM
jrtplib库:libjrtp.so.3.11.1.tar.gz
jthread版本:libjthread.so.1.3.3.tar.gz
http://research.edm.uhasselt.be/jori/page/CS/Jrtplib.html
本交叉编译是将RTP接收端放在ARM开发板上运行,RTP发送端在Ubuntu系统上运行。(由于发送端和接收端各自的运行环境不一样,所以,需要编译两次jrtplib库和jthread库)
接收端:交叉编译jrtplib和jthread库
具体步骤:
(1)下载好jrtplib和jthread的两个压缩包,并将它们放到Ubuntu系统上解压,楼主在根目录下新建的JRTLIB目录,将两个压缩包都放到本目录下解压的。(注意:在这里不要将自己的压缩包放在共享目录下解压,否则解压jthread库会出现错误)
(2)先解压jthread库,查看自己系统上是否装有cmake工具,若没有,则apt-get install cmake,安装好cmake工具。
(3)进入解压好的jthread-1.3.3目录中,查看CMakeLists.txt文件。
(4)在CMakeLists.txt文件首行加入下面几句话:
#告知当前使用的是交叉编译方式
SET(CMAKE_SYSTEM_NAME Linux)
#设置c编译器
SET(CMAKE_C_COMPILER "arm-linux-gcc")
#设置c++编译器
SET(CMAKE_CXX_COMPILER "arm-linux-g++")
(5)执行cmake CMakeLists.txt(执行完以后,会出现Makefile )(6)执行make
(7)make install
(8)然后进入jrtplib-3.11.1目录下,同样执行第4步到7步的方法。
(9)进入编译好的头文件路径中,/usr/local/include,会看到有jrtplib3、jthread两个目录文件。
(10)然后进入jrtplib3目录中,找到rtpconfig.h头文件,将头文件中的#define RTP_BIG_ENDIAN(切记要屏蔽掉),因为这一点啃了我一半天的时间;由于pc机和ARM开发板的
端结构不同,导致我用PC给ARM板发送数据,ARM端不能接收到数据,但是程序能运行。(开发板芯片是小端结构,所以要屏蔽掉PC端使用的大端结构宏定义)
(11)这时候编译自己的RTP接收端程序,可能会出现缺少头文件的错误。
解决方法:(1)进入/usr/local/include中将jrtplib3、jthread两个目录文件,直接拷贝到你自己使用的交叉编译工具的头文件目录下,LZ使用的是arm-linux-4.5.1的交叉编译工具(/usr/local/4.5.1/arm-none-linux-gnueabi/include);如果还提示没有头文件,就注意要在你的RTP接收程序的头文件里改路径,例如:#include "jrtplib3/rtpsession.h"。
若还提示没有头文件,就将jrtplib3、jthread两个目录文件,再复制一份到/usr/include 目录下面。
(12)这时候还没有结束,马上又会提醒你缺少库文件。
解决方法:(1)进入/usr/local/lib中将libjrtp.so、libjrtp.so.3.11.1 、libjthread.so、libjthread.so.1.3.3各复制一份到/usr/local/4.5.1/arm-none-linux-gnueabi/lib中。
ok!接收端大功告成。
PC发送端:普通编译jrtplib和jthread库
(1)LZ建议最好将之前已经生成的jrtplib3、jthread两个目录文件,删除了;重新解压,重新得到jrtplib3、jthread这两个目录文件。
(2)然后直接执行接收端的第5步到第7步。(不需要第4步,也不需要再去屏蔽大端结构宏定义了,因为是在电脑上运行)
(3)后面的步骤基本上和接收端,后面的步骤一样,记住哪里缺少头文件和库文件,就向相应的地方添加头文件和库文件。
RTP实时传输代码,后续更新。