goahead 2.1.8 移植

 

1. LINUX/Makefile 加入以下变量,由于要跨平台编译修改编译工具链

      CROSS_COMPILE    = rsdk-linux-   #这里根据各个平台的编译工具链来写可能是:arm-linux-, mips-linux- 等等 

      AS       = $(CROSS_COMPILE)as

      LD       = $(CROSS_COMPILE)ld

      CC       = $(CROSS_COMPILE)gcc

      CPP      = $(CC) -E

      AR       = $(CROSS_COMPILE)ar

      NM       = $(CROSS_COMPILE)nm

      STRIP        = $(CROSS_COMPILE)strip

      OBJCOPY      = $(CROSS_COMPILE)objcopy

      OBJDUMP      = $(CROSS_COMPILE)objdump

 

2. LINUX/main.c 将下面的代码注释,因为开发板不一定有主机名,所以要将这段代码注释,直接以IP的形式访问

           /*

           if ((hp = gethostbyname(host)) == NULL) {

               error(E_L, E_LOG, T("Can't get host address"));

               fprintf(stderr,"initWebs: host name %s/r",host);

               return -1;

           }

           memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],

               (size_t) hp->h_length);

           */

           intaddr.s_addr = inet_addr("192.168.1.6");     // eth0 网卡IP

注: 

0. 移植的时候问题千奇百怪,但最终的目标就是让一个程序到目标平台能够顺利运行

1. 由于平台不同,可能二进制文件的存储格式也不尽相同,所以要使用不同的编译工具链,在Makefile中指出,最好是用CC,LD,AR...变量来表示这些工具链

2. 库函数的有无,在移植2.5 版本的时候遇到一个readdir_r这个函数,这个函数在目前的开发板上好像没有提供,又不知道如何用其他函数代替这个函数,花了两天的时间,只能移植其他版本的了,用最稳定的那个2.1.8版本吧 。移植的时候要考虑目标板的库函数和当前平台的库函数是否相同,其实只要用目标工具链编译之后,放到目标平台就OK了,一运行。就出来了。

3. 在不同的平台上,一个程序的部分逻辑可能会被改变。 如上面的IP访问设备。这个设备根本就没有主机名,但在普通的PC是有的。

4. 当自己不会移植的时候,到Baidu,Google,看有没有现成的移植解决方案,改改,变成自己的,但是一定要从中学到完整的移植思路,这个才是最为重要的

5. 在以前的WEBServer 和Goahead 之间纠结了几天,最终还是选择了goahead... 一切向前看吧,goahead提供的强大的功能根本就不是以前的那个服务器能比的,尽管以前写了很多的代码,需要重构这一切,但这是值得的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值