【记录】用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目

【背景】

手上有一个无线HART的源码,其是基于Eclipse的项目。

想要交叉编译该项目。

之前已经通过crosstool-ng弄出一个交叉编译器arm-xscale-linux-gnueabi了:

【记录】重试使用最新版本1.18.0的crosstool-ng去配置和编译xscale的交叉编译器

又交叉编译了,该项目所依赖的四个库:

【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译xmlrpc

【记录】Cygwin下用arm-xscale-linux-gnueabi-gcc交叉编译curl(libcurl)

【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译libxml2

【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译log4c

【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译expat

此时,可以接着,基于Eclipse,去编译此项目了。

【折腾过程】

1.先要去修改原先的makefile。因为其中的很多路径,是之前别人的路径,此处要改为自己当前的路径。

2.突然发现,此处的Eclipse中该项目的makefile,中的很多路径,都是类似于:

/home/xxx/usr/local/armxscalecurl/bin

的路径,说明了:

此项目,是基于Linux平台下,Eclipse的项目。

所以,可以直接使用此种路径。

而当前我此处是:

win x64,在cygwin下弄出来的交叉编译器

所以,意味着:

无论是使用cygwin下的/cygdrive/xxx的路径 -> Win7下的Eclipse不支持

直接使用win7的路径,E:/xxx->Eclipse中的makefile,估计很多都无法运行,包括路径中,可能包括空格,以及此时调用的Makefile,是不是linux/cygwin下兼容的makefile

所以,目前看来,只能是去:

把代码拿到cygwin下,尝试在cygwin下面编译,或许最终可以编译成功。

3.把代码拷贝到cygwin下。

4.修改路径的时候,结果却发现,此项目还需要一个库libcgi,所以,再去继续交叉编译这个libcgi:

【记录】cygwin下用arm-xscale-linux-gnueabi交叉编译libcgi

5.然后继续折腾。

改好了路径后,直接去make:

6.结果出错了:

【已解决】用arm-xscale-linux-gnueabi编译代码出错:error: lvalue required as unary ‘&’ operand

按照同样的改法,以此把余下的,同样的错误,都改掉。

7.最后,就对于WBM,编译完成了,生成了arm的可执行文件:

CLi@PC-CLI-1 ~/develop/wihart_gateway_6_0/WBM/Build
$ file xxx.exec
xxx.exec: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.19, not stripped

8.编译完成了WBM后,再去编译WHGS。

对应的,修改好路径后,去make编译。

9.结果出错:

fatal error: log4c.h: No such file or directory

发现是原先的makefile中,没有添加log4c的include路径,所以去添加上:

 -I $(LOG4CROOTDIR)/include

然后再去make

10.然后解决了一堆,和之前一样的

error: lvalue required as unary ‘&’ operand

的问题后,一直编译到最后,结果是ld找不到我们此处的一些库:

/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/lib/gcc/arm-xscale-linux-gnueabi/4.6.0/../../../../arm-xscale-linux-gnueabi/bin/ld: cannot find -lxmlrpc_client
/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/lib/gcc/arm-xscale-linux-gnueabi/4.6.0/../../../../arm-xscale-linux-gnueabi/bin/ld: cannot find -lxmlrpc
/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/lib/gcc/arm-xscale-linux-gnueabi/4.6.0/../../../../arm-xscale-linux-gnueabi/bin/ld: cannot find -lxmlrpc_util
/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/lib/gcc/arm-xscale-linux-gnueabi/4.6.0/../../../../arm-xscale-linux-gnueabi/bin/ld: cannot find -lxmlrpc_xmlparse
/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/lib/gcc/arm-xscale-linux-gnueabi/4.6.0/../../../../arm-xscale-linux-gnueabi/bin/ld: cannot find -lxmlrpc_xmltok

所以,看来需要去添加lib的路径。

结果发现是自己把XMLRPCROOTDIR误写为了LIBXMLROOTDIR,所以导致路径设置有误,没有找到上述的xmlrpc的库。

11.改了后,再去编译,结果可以找到xmlrpc库,但是又出现其他错误:

【记录】用交叉编译器arm-xscale-linux-gnueabi交叉编译出错:ld: warning: libexpat.so.1, needed by liblog4c.so, not found (try using -rpath or -rpath-link)

然后就编译完成了。

12.去看看最后生成的文件:

CLi@PC-CLI-1 ~/develop/wihart_gateway_6_0/WHGS/Build
$ file xxxMainApp
xxxMainApp: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.19, not stripped

的确是可以正常的生成了arm的app了。

 

【总结】

至此,看来是,可以通过交叉编译器arm-xscale-linux-gnueabi,去编译当前的项目了。



2 Thoughts on “【记录】用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目

  1. 楼主下了很大功夫啊!最近也在做相关的工作,不知你的HART源码能否给我传一份。dagerjjz@163.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量