补充上一篇(JRTPLIB在arm和pc间收不到数据包的问题)

今天花了一天的时间实现了jrtp到pxa270的移植,下面把其中遇到的问题及相应的解决方法说一下。

其实jrtp的arm交叉编译很简单,具体步骤可以如下:

cd jrtp所在目录 ——> ./configure --host=arm-linux CXX=arm-linux-g++ ——>make——>make install

我被卡住的原因是在make的最后一个阶段链接生成.so库文件时发生了"relocations in generic elf"的错误,从错误的提示信息"file in wrong format"看,可能是所用的链接工具arm-linux-ld与被连接的文件在编译时所用的gcc工具不匹配所致,由于make信息所显示的链接工具是arm-linux/bin/ld二不是arm-linux-ld,所以起先我认为是configure的链接选项没有设置好,拼命地找方法去改变链接工具,但是没有成功。万般无奈之际Google起来,从别人对于relocations in generic elf这一错误的讨论的只言片语中,我感觉到了一种可能的解决方法——重新拷贝jrtp源程序,重新交叉编译,这一次成功了。分析起来可能的原因是:我之前用那个源文件编译了在pc上的jrtp库,在那其中生成了一些目标文件没有被覆盖还停留在源文件目录里,故而导致了relocations in generic elf错误。至于其它的一般的问题,在很多问章里面都有叙述,我简单罗列如下:

1> 在RTPSession.h中加入头文件stdio.h —— 这个相关问题我没遇到,因为在解决上面问题的过程中我就都一并把它改了。

2> 在把--host选项配置成arm-linux时,会把target的架构默认为arm的,而大部分arm架构的处理器的存储器组织都是Big-Endian的,所以配置程序会自动在RTPSession.h文件中生成#define RTP_BIGENDIAN项,而这就可能会导致arm与x86架构的pc机之间数据交换的出错,因为x86架构的存储器组织一般是Little_Endian的。而PXA270虽然也是arm架构,但其存储器组织确实Little_Endian的(可能因为它是intel出的片子吧),make之前应该注释掉#define RTP_BIGENDIAN,从而编译成little-endian的jrtp库。但是我还是有一个疑问:编译成Little-Endian的jrtp库能够在Big-Endian建构的一般arm片子上跑吗?按照上面的叙述推理应该是可以的。

3> jrtp库编译成功以后,我便移植了其中的example1到pxa270上,可以预料地,我碰到了cann't retrieve login name 的错误。关于这个错误的解决,上边转载的文章里已经有详细的说明,我的做法就是让char *loginname = "root"。

写完收工 ^_^

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值