jrtplib+jthread 交叉编译 openssl 交叉编译

一、移植JRTPLib到嵌入式(arm)平台

JRTPLIB库是一个RTP协议的开源库,使用这套库文件,我们可以创建端到端的RTP连接,实现数据的实时传输。

JRTPLIB是使用标准c++编写的.

下载

你可以在这里下载JRtplib,同时,需要下载JThread。

解压

解压目录/usr/local/software/

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 /usr/local/software/ jthread-1.2.1

在终端中输入:

./configure

-host=arm-linux

CC=arm-linux-gcc

jrtplib+jthread 交叉编译 openssl 交叉编译
CXX=arm-linux-g++

将生成一个Makefile文件。

执行

make

make install

jthread安装完毕。

安装JRtpLib

和安装JThread类似

进入解压后目录

cd /usr/local/software/ 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),可能是由于字节序的不同,导致了明明存在数据包,却认不出来的问题

解决方法:在/usr/local/software/jrtplib3/src/rtpconfig_unix.h 中注销掉大端模式

//#define RTP_BIG_ENDIAN // comment this if the target is a little endian system

//#define RTP_SUPPORT_THREAD

添加线程后编译不通过,所以一起把线程宏定义注销掉

make

make install

完成后,可以看到/usr/local/lib目录下多了JThread和JRtpLib的库文件:

测试

在JRtpLib目录下有几个例子程序,我们可以用来测试JRtpLib。进入/prj/share/source/jrtplib-3.7.1/examples目录:

cd /prj/share/source/jrtplib-3.7.1/examples

将编译好(下载时已交叉编译好,可以通过file example1查看,如果看到目标使用环境是ARM则说明以交叉编译好,另外如果没有剪裁,也可以通过arm_v5t_le-strip example1进行剪裁以去掉调试信息)的例子文件复制到nfs目录下:

cp example1 /opt/nfs//opt/dvsdemos/

登陆到开发板,进入文件所在目录,输入:

./example1

即可看到运行结果:

enter local portbase

JRTPLIB在arm和pc间收不到数据包的问题

最近本人在作关于RTP的项目,要求在arm和pc间用RTP协议传输数据。

1. 下载jrtplib-3.7.1和jthread-1.2.1。

2. pc上编译很简单,windows下编译过程如下:

首先编译jthread库。然后解压缩jrtplib,打开jrtplib.dsw工程,注意工程的include路径设置,要包含jrtplib和jthread的头文件,然后编译。将编译生成的jrtplib.lib和jthread.lib拷贝到Microsoft Visual Studio的VC98/Lib目录下。在编译jrtplib.lib和jthread.lib的时候,在project——settings——C/C++——Code generation:use run-time library中,对于debug,选择:Debug Multithreaded DLL,对于release,则选择:Multithreaded DLL。

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/57044.html

更多阅读

解决vc++中一个古怪问题:从“C:WINDOWSsystem32cmd.exe”

装的.net编c++程序时碰到一个古怪问题,新建的空白项目都会编译不过,编译时报错项目 : error PRJ0002 : 错误的结果1(从“C:WINDOWSsystem32cmd.exe”返回)。但是会生成一个exe文件,运行exe文件时会说找不到msvcr80d.dll文件,上网一查,说

让网格动起来5 —配置UDF编译环境 动网格 平动 udf

FLUENTUDF中关于动网格的DEFINE宏均要求为编译型。FLUENT的UDF运行环境有两种:解释型与编译型。虽然两种方式都是采用编译,但是编译方式及编译后获得的结果是不同的。编译型UDF需要通过Complied进行编译,编译后得到相应的dll文件。而解

十字交叉法 十字交叉法分解因式

2009-03-04 15:35 首先,认知灵活性超文本提供的是构成知识序列的知识单元,以及围绕该知识序列进行组织的探索环境,这能有效促进学习者反复进行建构型思考。其次,认知灵活性超文本中预定的知识范围通常局限于大致描述应如何对该领域

均线多头,空头排列图形 多头排列 空头排列

均线多头排列  在下跌行情中,5日、10日、30日移动平均线自上而下依次顺序排列,向右下方移动,称为均线空头排列,预示股价将大幅下跌,如图所示。均线空头排列均线黄金交叉  上升行情初期,短期移动平均线从下向上突破中长期

领带的10种系法 系领带方法

领带的10种系法1、平结平结为最多男士选用的领结打法之一,几乎适用于各种材质的领带。与四手结的系法相似,非常方便,领结呈斜三角形,适合窄领衬衫。要诀:领结下方所形成的凹洞需让两边均匀且对称。2、交叉结交叉结的特点打出的结有

声明:《jrtplib+jthread 交叉编译 openssl 交叉编译》为网友森屿微央分享!如侵犯到您的合法权益请联系我们删除