一.关于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