jrtplib linux编译,jrtplib+jthread 交叉编译
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 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的庫文件:
參考以下兩篇:
總結
以上是生活随笔為你收集整理的jrtplib linux编译,jrtplib+jthread 交叉编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一步步学习微软InfoPath2010和
- 下一篇: linux 其他常用命令