今天我要将libwebsocket交叉编译到cortex a-8中,安装好交叉编译器后,开始..
1、libwebsocket是用autoconf配置的,得先了解autoconf的交叉编译,网上查得后自己配置成功的方式是:
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。