移植开源项目的一点体会(一)

  

 

       最近一直在关注开源项目的问题。老是感觉,还是糊里糊涂,似懂非懂的。这样下去,非成半调子不可。这可真的不太好, 要做就要在一个方面做精啊~~ 。

        就讲讲porting当中的出现的一些个难点吧。首先是开源软件的的版本比较多,要选择合适的。一般基于linux的嵌入式移植,交叉编译的库是精简的,有可能缺少很多库和头文件。开源软件一般的历史比较久远,不断发展起来的,越早的话,它的源代码规模越小,需要支持的别的库也比较少。需要支持的库少了,我们就不需要痛苦的因为没有这些库,给自己一些额外的工作量拉。举个简单的例子:wvdial是一个拨号用的opensource project,它依赖于一个库wvstreams和openssl,而当你想编译wvstreams的时候,你又会发现wvstreams又依赖zlib。总之是一连串的,这要根据我们的交叉编译环境来确定需要增加些什么。

        要选择合适的版本号,还有个要考虑的问题是,这个编译出来的project的可执行文件和运行库的大小,我们做的是嵌入式软件,嵌入式设备的存储设备比较小,象我们所用的存储空间只有32M,编译出来的image空间只允许在8M以内,一般情况下,就都有个6点几M拉,如果要是加一个比较大的project,那当然就够呛。比如说:曾经port samba,当我下载最新的版本交叉编译通过后,发现最后的可执行文件居然达到1.5M,当然这是我所不能接受的。所幸的是,上面曾提到的opensource是越早的越小,我们可以选用早期的版本。最后,选取v3.0.6(可能有误),最后的编译出来的文件也就几百k。这方面的考虑,也是我们慎重选择版本号的一个原则。

    其次,就是有些开源软件的编译架构有点复杂。我说的复杂是,需要根据不同的编译架构,来修改编译文件.一般的编译过程就是先./configure,然后修改makefile,使其达到交叉编译的目的.但是有的opensource不一样,它还有个config目录,目录里面有 *rule.mk的文件,好多东东需要在这个地方改,所以当第一次遇到的时候,也花了一些工夫的哦.改makefile,改config.h,加支持库是port的主要工作.

  如何改makefile文件呢?主要是修改以下几个方面的东西.compiler,ar,ranlib,ld,cflags,ldflags以及install以及make clean. compiler编译器一般都是使用的gcc或者g++ ,在这里你要改成交叉编译器。如:

        cc = gcc      ->     cc =  $(CROSS_COMPILE)g++

或者干脆注释掉这一行的代码,这样的话,编译该项目的时候,就会使用上一层目录中定义的默认编译器。ar,ranlib,ld等等工具也是同样的道理。当然还要修改cflag,这个标志主要用来增加头文件的引用路径,比如,编译时需要用到目录/root/abcd中的头文件,只要增加一行:

       cflags += -I/root/abcd;      

       同样的ldflags是增加支持依赖库的路径,ldflag += -lcrypto  -L/root/abcd,这句的意思是:在默认路径下寻找名为crypto的库,然后增加/root/abcd为库的寻找路径。install 是最后的步骤,就是将编译好的文件安装到制定的目标机的目录中去。一般使用命令为:

       install -m 777 $(srcdir)/bin/XXX $(install_dir)/bin; 

       if test -d $(INSTALL_DIR)/lib/codepages;then echo "abcd";else/
       mkdir  -p $(INSTALL_DIR)/lib/codepages;fi

      有时还需要改config.h文件,就个文件记录的是./configure执行后搜索到的一些支持库和头文件的记录,当然,我们是在开发机上运行的,这个文件记录的就肯定不能直接用来交叉编译。这个就根据实际编译提示信息的 情况来反复修改,因为我不知道交叉编译环境支持些甚么库,主要是我这一招很有能用所以没去深究这一块,也许可以查看一下是能直接修改好。

       当然交叉编译时遇到的问题还有其他方面,如:编译器版本不对编不过opensource怎么处理,修改了makefile后遇到编译错误后该如何处理。这些留待下一篇文章再讲拉。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值