交叉编译遇到的问题

来源:互联网 发布:网络语笔芯是什么意思 编辑:程序博客网 时间:2024/05/16 01:41

今天我要将libwebsocket交叉编译到cortex a-8中,安装好交叉编译器后,开始..

1、libwebsocket是用autoconf配置的,得先了解autoconf的交叉编译,网上查得后自己配置成功的方式是:

 用autotools生成configure脚本后,运行如下命令:
CC=arm-none-linux-gnueabi-gcc  ./configure --build=i686-pc-linux --host=arm-none-linux-gnueabi
然后运行make命令
注意:这边CC和--host 的形式是一致的(下面参考网站中这点的问题让我纠结了很久)
参考:http://his9932.blog.51cto.com/2915040/564943 

2、make的时候,出现zlib.h 找不到的问题,网上查的都是说缺少zlib1g,但是我发现我已经装过了,而且使用gcc编译的时候,zlib是存在的。后面在浏览网页,看到别人说zlib也要交叉编译,于是下载zlib源码,交叉编译,配置,竟然可以用了~~(网址不知道是哪了)

3、在交叉编译zlib的时候,需要配置

1)./configure --shared --prefix=/安装路径

  make LDSHARED="arm-none-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1" CC_FOR_BUILD="arm-none-linux-gnueabi-gcc" CC="arm-none-linux-gnueabi-gcc" LD="arm-none-linux-gnueabi-ld" CPP="arm-none-linux-gnueabi-g++ -E" AR="arm-none-linux-gnueabi-ar" prefix="/usr/local/arm/2.95.3"    CFLAGS="-fPIC" libz.so.1.2.7 libz.a

2)拷贝zconf.h zlib.h到/usr/local/arm/2.95.3/arm-linux/include/
拷贝 libz.so* 到/usr/local/arm/2.95.3/arm-linux/lib/

注:/usr/local/arm/2.95.3/是交叉编译安装的路径

与参考网址中不同的是,AR="arm-none-linux-gnueabi-ar"这边少了 rc,因为这个搞了很久,多了rc会出现缺少libz.a 的问题。

参考:http://blog.csdn.net/wwwxxlby520/article/details/4384361 

4、编译成功后,将可运行文件拷贝到开发板上,运行不了,提示bash --not found.使用file filename命令检查,很神奇的事情是,使用gcc编译的时候,是显示

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x7e8b4b086772a0c25e129b2371260140efc3498b, not stripped

可运行文件,但是使用arm-none-linux-gcc编译出来的文件,发现,竟然是

Bourne-Again shell script, ASCII text executable, with very long lines

是脚本文件,不是可运行文件,打开该文件,发现 注释写着libwebsockets-test-server - temporary wrapper script for .libs/libwebsockets-test-server,于是跑到查看.libs下的文件查看,发现是可执行文件

 ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped。