交叉编译jrtplib3.9.1详解

一.关于Linux pc端编译参考博客:http://blog.csdn.net/zhangjikuan/article/details/27974733

二.交叉编译

1.先编译jthread

     修改CMakeLists.txt

     在文件中set(VERSION 1.3.1)行的下面添加以下代码

     #add by zjk   
     set (CMAKE_SYSTEM_NAME Linux)                              设置目标系统,随便设置
     set (CMAKE_C_COMPILER "arm-linux-gcc")                 设置C编译工具,C交叉编译器
     set (CMAKE_CXX_COMPILER "arm-linux-g++")            设置C++编译工具,C++编译器
     #end

保存后  cmake CMakeLists.txt

              make 

              make install

   这样jthread的头文件和库文件就分别在/usr/local/include    和/usr/local/lib  目录下了

2.编译jrtplib3.9.1

    与jthread一样修改CMakeLists.txt文件,修改内容一样

    进入jrtplib3.9.1目录运行 cmake CMakeList.txt

   由于开发板上的芯片是小端结构的,所以执行完cmake CMakeList.txt后,要根据大小端情况先修改src文件夹下     的rtpconfig.h,把 #define RTP_BIG_ENDIAN 这句话注释掉。(我的就没有这句话,所以没注释)

    这是网上的注意事项:注意:在执行cmake CMakeList.txt前是没有这 句话的,今天在这里卡了很久)第一次实现的时候有收到开发板发来的数据, 但是vlc就是播放不了,经过抓包对比才找到原因,正常RTP头前两个字节是(80 E0 ),而开发板发来的数据RTP头前两个字节是(02C1 ),这才焕然大悟是大小端的问题。

.由于板子上的linux操作系统可以在没有用户名的情况下登录,所以rtpsession.cpp中的CreateCNAME可能报Can't retrieve login name的错误,因此需要修改几句代码:

在int RTPSession::CreateCNAME(uint8_t *buffer,size_t *bufferlength,bool resolve)中修改两行代码

if (!gotlogin) // try regular getlogin
{
char *loginname = getlogin();
if (loginname == 0)
//gotlogin = false;                                                           屏蔽掉
strncpy((char *)buffer,"root",*bufferlength);                 强制为root
else
strncpy((char *)buffer,loginname,*bufferlength);
}

运行 make

     make install

这样jrtplib的头文件和库文件就分别在/usr/local/include    和/usr/local/lib  目录下了

至于该把这些头文件放到哪个目录下请参考PC编译的博客http://blog.csdn.net/zhangjikuan/article/details/27974733   

与PC不同的是可能交叉编译的头文件和库文件搜索位置不一样,参考博客:http://blog.csdn.net/zhangjikuan/article/details/31417649

关于其他可能遇到的问题参考:http://blog.csdn.net/zhangjikuan/article/details/31741803


你可能感兴趣的:(详解,交叉编译,jrtplib3.9.1,jthread)