【背景】
手上有一个无线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库,但是又出现其他错误:
然后就编译完成了。
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,去编译当前的项目了。
转载请注明:在路上 » 【记录】用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目