jrtplib+jthread 交叉编译

jrtplib+jthread 交叉编译 (2011-05-04 11:11)
分类: 嵌入式


JRTPLIB库是一个RTP协议的开源库,使用这套库文件,我们可以创建端到端的RTP连接,实现数据的实时传输。
JRTPLIB是使用标准c++编写的.
tar -jxvf jrtplib-3.7.1.tar.bz2
tar -zxvf jthread-1.2.1.tar.gz
解压后在当前文件夹下会生成rtplib-3.7.1,jthread-1.2.1两个目录。
安装jthread
 
采用默认的安装路径,安装结束后将回在/usr/local/include  /usr/local/lib下生成相应的头文件与库。此外,还需要指定编译环境,将Host设置为arm -linux,CC设定为交叉编译器的路径,具体设置方法可以在终端中输入./configure –help查看。
进入解压文件目录:
 
cd  jthread-1.2.1
 
在终端中输入:
 
./configure -host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++
 
将生成一个Makefile文件。
执行
make
make install
jthread安装完毕。
 
安装JRtpLib
和安装JThread类似
进入解压后目录
cd   rtplib-3.7.1
 
执行配置文件
./configure -host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++
编译:
第一种:
1. 遇到了第一个棘手的问题,提示can't retrieve login name,建立不了rtpsession。在rtpsession.cpp中。
后来发现是RTPSession::CreateCNAME这个函数搞得鬼
这个函数会从系统调用里获取loginname,但是一般的板子由于内核和文件系统的原因都没有loginname,所以
if (!gotlogin)
 {
  char *logname = getenv("LOGNAME");
  if (logname == 0)
   return ERR_RTP_SESSION_CANTGETLOGINNAME;//这里return了一个error
  strncpy((char *)buffer,logname,*bufferlength);
 }
所以我强制将logname的值设为root,就ok了。
2、有些人会遇到arm和pc无法互相接受数据包的问题,但是pc和pc,arm和arm就可以收到。我用sniffer抓了一下包发现确实是有数据包的,所以应该不是程序的问题。这个问题上网查了一下,也没人说的明白,只有一个高人点了一下,可能是字节序和位域的问题。自己又研究了一下,也是一知半解。
一般x86的pc机是用小端字节序(little endian),而嵌入式平台一般是大端字节序(big endian),可能是由于字节序的不同,导致了明明存在数据包,却认不出来的问题
解决方法:在jrtplib3/src/rtpconfig_unix.h 中注销掉大端模式
//#define RTP_BIG_ENDIAN // comment this if the target is a little endian system
//#define RTP_SUPPORT_THREAD   
添加线程后编译不通过,所以一起把线程宏定义注销掉
 
第二种
gedit src/rtperrors.h 
添加  #include <stdio.h>
gedit src/rtpconfig_unix.h
 注释掉 //#define RTP_BIG_ENDIAN // comment this if the target is a little endian system 
gedit src/rtpsession.cpp
        if (!gotlogin)
        {
                char *logname = getenv("LOGNAME");
                 char myname[] = {'R','u','n','S','h','e','n','g','\0'};
                logname = myname;
                if (logname == 0)  //处理返回错误
                        return ERR_RTP_SESSION_CANTGETLOGINNAME;
                strncpy((char *)buffer,logname,*bufferlength);
        }
gedit examples/Makefile  //处理链接库
INCLUDES = -I /usr/local/include/jthread -I ../src/
LDADD = ../src/.libs/libjrtp.a -L/usr/local/lib/ -ljthread -lpthread
 
make
make install
完成后,可以看到/usr/local/lib目录下多了JThread和JRtpLib的库文件:
 
参考以下两篇:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值