jrtplib linux编译,jrtplib+jthread 交叉编译
JRTPLIB庫(kù)是一個(gè)RTP協(xié)議的開(kāi)源庫(kù),使用這套庫(kù)文件,我們可以創(chuàng)建端到端的RTP連接,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸。
JRTPLIB是使用標(biāo)準(zhǔn)c++編寫(xiě)的.
tar -jxvf jrtplib-3.7.1.tar.bz2
tar -zxvf jthread-1.2.1.tar.gz
解壓后在當(dāng)前文件夾下會(huì)生成rtplib-3.7.1,jthread-1.2.1兩個(gè)目錄。
安裝jthread
采用默認(rèn)的安裝路徑,安裝結(jié)束后將回在/usr/local/include? /usr/local/lib下生成相應(yīng)的頭文件與庫(kù)。此外,還需要指定編譯環(huán)境,將Host設(shè)置為arm -linux,CC設(shè)定為交叉編譯器的路徑,具體設(shè)置方法可以在終端中輸入./configure –help查看。
進(jìn)入解壓文件目錄:
cd? jthread-1.2.1
在終端中輸入:
./configure -host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++
將生成一個(gè)Makefile文件。
執(zhí)行
make
make install
jthread安裝完畢。
安裝JRtpLib
和安裝JThread類(lèi)似
進(jìn)入解壓后目錄
cd?? rtplib-3.7.1
執(zhí)行配置文件
./configure -host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++
編譯:
第一種:
1. 遇到了第一個(gè)棘手的問(wèn)題,提示can't retrieve login name,建立不了rtpsession。在rtpsession.cpp中。
后來(lái)發(fā)現(xiàn)是RTPSession::CreateCNAME這個(gè)函數(shù)搞得鬼
這個(gè)函數(shù)會(huì)從系統(tǒng)調(diào)用里獲取loginname,但是一般的板子由于內(nèi)核和文件系統(tǒng)的原因都沒(méi)有l(wèi)oginname,所以
if (!gotlogin)
{
char *logname = getenv("LOGNAME");
if (logname == 0)
return ERR_RTP_SESSION_CANTGETLOGINNAME;//這里return了一個(gè)error
strncpy((char *)buffer,logname,*bufferlength);
}
所以我強(qiáng)制將logname的值設(shè)為root,就ok了。
2、有些人會(huì)遇到arm和pc無(wú)法互相接受數(shù)據(jù)包的問(wèn)題,但是pc和pc,arm和arm就可以收到。我用sniffer抓了一下包發(fā)現(xiàn)確實(shí)是有數(shù)據(jù)包的,所以應(yīng)該不是程序的問(wèn)題。這個(gè)問(wèn)題上網(wǎng)查了一下,也沒(méi)人說(shuō)的明白,只有一個(gè)高人點(diǎn)了一下,可能是字節(jié)序和位域的問(wèn)題。自己又研究了一下,也是一知半解。
一般x86的pc機(jī)是用小端字節(jié)序(little endian),而嵌入式平臺(tái)一般是大端字節(jié)序(big endian),可能是由于字節(jié)序的不同,導(dǎo)致了明明存在數(shù)據(jù)包,卻認(rèn)不出來(lái)的問(wèn)題
解決方法:在jrtplib3/src/rtpconfig_unix.h 中注銷(xiāo)掉大端模式
//#define RTP_BIG_ENDIAN // comment this if the target is a little endian system
//#define RTP_SUPPORT_THREAD
添加線程后編譯不通過(guò),所以一起把線程宏定義注銷(xiāo)掉
第二種
gedit src/rtperrors.h
添加??#include 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)??//處理返回錯(cuò)誤
return ERR_RTP_SESSION_CANTGETLOGINNAME;
strncpy((char *)buffer,logname,*bufferlength);
}
gedit examples/Makefile??//處理鏈接庫(kù)
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的庫(kù)文件:
參考以下兩篇:
總結(jié)
以上是生活随笔為你收集整理的jrtplib linux编译,jrtplib+jthread 交叉编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一步步学习微软InfoPath2010和
- 下一篇: 视频教程-2020年上半年 软考 系统分