交叉编译jrtplib3.9.1详解

一.关于Linux pc端编译参考博客: http://www.lai18.com/content/1120903.html

二.交叉编译

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://www.lai18.com/content/1120903.html  


与PC不同的是可能交叉编译的头文件和库文件搜索位置不一样,参考博客: http://www.lai18.com/content/1120917.html

关于其他可能遇到的问题参考: http://www.lai18.com/content/1120918.html

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