Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)
https://blog.csdn.net/lvshaorong/article/details/52931211
刚刚买了一个网件wndr4300路由器,快递还没送来就已经开始琢磨刷机的事了。卖家提供了一个明月的op固件,里面功能超级多但是非常臃肿,我在hg255d上的使用经验告诉我这样臃肿的包非常耗费CPU资源,而且会导致网速变慢和无故重启。恩山上大神编译的几乎都是添加了很多应用的固件。而我只需要一个ss功能就够了,最好有luci界面,所以决定自己编译出ipk包放到路由器上使用opkg安装。
注:OP的SDK算是比较好用的SDK工具了,可以自动帮你解决依赖问题,但是如果你使用潘多拉BOX的SDK或者LEDE的SDK就没有OP的这么好用了,往往会出现各式各样的错误,经常找不到依赖库等等。对此我又单独谢了一片文章介绍如何在潘多拉和LEDE SDK环境下编译IPK,有兴趣的可以看这篇:《Pandora/LEDE SDK交叉编译OpenWrt ipk安装包的方法》
首先去openwrt ss的github官网,https://github.com/shadowsocks/openwrt-shadowsocks 这上面只给了makefile文件,没有c源码,因为c源码都在Shadowsocks-libev项目上,在makefile时会自动的去github上下载一个tar包,然后编译那里面的文件,如https://github.com/shadowsocks/openwrt-shadowsocks/releases/download/v2.5.5/shadowsocks-libev-2.5.5.tar.gz,如果你网速很慢可以把makefile中相关的url改掉换成本地下载好的tar包。正常情况下我们不需要修改makefile就能正常编译。
注意:在编译过程中会联网下载大量的依赖库,所以一定要保证网络畅通稳定,否则会频繁失败,我在下载依赖库的时候都不到2KB/s。
网上很多编译ss的教程都是2014年的,它们都是直接clone openwrt的源码,然后用openwrt的源码编译出很多编译工具再编译apk,这样做非常的耗时,我亲自试过大概花了3个多小时也没成功,自从有了SDK之后就不用这么麻烦了,编译过程10几分钟就可以搞定。同样github上也推荐我们使用SDK进行编译。
注意:SDK版本要选择适合你路由器及路由器上系统的,比如CC15.05 SDK编译出来的ipk不能装载trunc版上,反之亦然,所以我们要选择适合路由器上openwrt系统的SDK,下文以wndr4300 CC 15.05 版openwrt为例。
首先去openwrt的官网下载相关SDK,http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/ 如果你要编译的不是wndr4300,可以去根目录自己通过CPU,内存类型选择相应的SDK进行下载,这里就不废话了。
如上图,第一个黄线是编译固件要用的ImageBuilder,是编译完整固件用的,我们只编译ipk软件包所以用不到,第二个黄线就是我们要用的SDK文件了
第三个和第四个都是纯净版的OP系统,可以下载然后刷到wndr4300路由器里面,一个是原有OP网页刷,一个是原版或者tftp刷的固件。刷入这个固件然后再opkg安装我们编译出的ipk包就具备相关功能了。所以此时我们首先下载SDK。
下载完成之后放到一个好记而且没有权限限制的目录中,比如我在我的用户目录下建立一个叫OP_SDK的文件夹,然后把这个tar包放进去
注:我是用的winscp放进去的,在linux下可以直接使用wget http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2 来下载这个tar包
放上去之后我们解压这个tar包
tar xjf OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
解压完之后 OP_SDK目录下就会出现一个和tar包同名的文件夹,这里面就是我们要用到交叉编译的SDK了然后做非常重要的一步,安装编译相关的依赖库文件,否则进不去make menuconfig
sudo apt-get update sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk
sudo apt-get install subversion mercurial
而且还有非常重要的一步,是安装c编译环境,当初我就因为ccache没有安装导致一晚上都白忙活
sudo apt-get install ccache
因为ccache Ubuntu 16.04没有默认安装,导致编译的时候一直报 C compiler cannot create executables错误,浪费了很多时间
基本的环境安装完成之后,我们就可以开始编译工作了,注意保持网络畅通
根据github上的README即可
cd ./OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/ # 安装 feeds ./scripts/feeds update packages ./scripts/feeds install libpcre # 添加 feeds(ss v2.5.6之后的版本) git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds # 添加 feeds(ss 2.5.6版及之前,LEDE PandoraBox的SDK) git clone https://github.com/AlexZhuo/openwrt-feeds.git package/feeds =============先到这里暂停=============
# 获取 Makefile git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev # 选择要编译的包 Network -> shadowsocks-libev make menuconfig # 开始编译 make package/shadowsocks-libev/compile V=99
现在我们先开始安装feeds,就是用来选择编译什么插件用的列表
安装feeds的第一行命令会联网下载feeds列表,比较费时,第二行会报miss index的warning,不用管。
然后克隆git上的makefile文件下来,如果你网速慢也可以自己下载然后放到./package/shadowsocks-libev下面去,注意这里不要改文件夹的名字,因为写死在makefile里面了
但是这里我们暂停一下,因为编译ss是一个完整的解决依赖-编译-连接的过程,很容易出错,而编译luci UI界面只需要简单的打包一下即可,所以不妨先编译一下luci体会一下。
git clone https://github.com/shadowsocks/luci-app-shadowsocks.git package/luci-app-shadowsocks # 编译 po2lmo (如果有po2lmo可跳过) pushd package/luci-app-shadowsocks/tools/po2lmo make && sudo make install popd # 选择要编译的包 LuCI -> 3. Applications make menuconfig # 开始编译 make package/luci-app-shadowsocks/compile V=99
首先git克隆,此时在package目录下会出现一个luci的目录
然后继续执行,并不容易出错
然后选择编译luci的ipk通过make menuconfig
选择LuCI,确认时<M>选中,代表编译出ipk包
然后选择<Save>回车,保存后,连续选择<Exit>退出
上图直接选择<Ok>即可
然后我们就可以开始编译luci了
make package/luci-app-shadowsocks/compile V=99
因为不依赖c编译环境,所以不容易出错
然后去/bin/ar71xx/packages/base目录下就可以看到我们编译好的ipk了,把它取出来放到别的位置上然后删掉,我们准备开始编译ss
现在开始克隆ss的openwrt版并把刚才克隆的./package/luci-app-shadowsocks给删掉
注:本文以ss-libev v2.5.6为例,目前ss已经更新迭代多次,所以依赖库也不尽相同。所以git克隆完毕后要reset到2.5.6的版本
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev cd ./package/shadowsocks-libev git reset --hard v2.5.6
注:如果你想编译v3.0以上的版本,还需要获得一些openwrt没有提供的依赖包的makefile,需要执行如下语句
# 添加 feeds
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
然后像刚才选择luci一样在make menuconfig中选择ss
OpenSSL版支持的加密方法多,PolarSSL支持的加密方法少,看你的需求而定
注意:只编译上面选择的两个或者一个就好,不要选择第mbedTLS版,因为mbedtls需要第三方依赖库,而ubuntu是不给你自动安装的,会因为缺少依赖而编译失败
然后跟luci一样<Save>然后连续<Exit>
下面就是最激动人心的一步了,开始我们的c编译,连接过程
make package/shadowsocks-libev/compile V=99
在这个过程中会联网下载很多个依赖,要保证网络畅通然后静等,注意*不要*使用sudo权限!整个编译耗时大约2分钟左右,视网络状况而定下图是下载某个依赖库
下图是下载Shadowsocks-libev的源码
如果没有报错就说明编译完成了
在这个编译过程中遇到问题退出是很正常的,完全不需要大惊小怪,而且随着版本的更新会不断的出现新的编译问题,就需要我们自己去解决。
多数的编译问题都是缺少依赖库或者网络不畅,需要我们仔细的查看config.log文件
查找这个文件的方法是执行
locate config.log
一般编译到哪一步失败就去看哪一步的config.log,我之前碰到的一个编译失败是因为没安装ccache,在上图黄线的config.log在文章最后贴出来
如果编译成功,我们可以在/bin/ar71xx/packages/base目录下看到编译好的ipk了,这两个ipk到时候只安装一个就好,不要都安装
现在挑一个你需要的ipk出来放到openwrt系统下使用opkg安装即可,还可以配合之前做好的luci UI界面ipk包
==============我是分隔线==============
经过漫长的等待,终于从快递手中收到路由器了,之前编译好的三个ipk包感觉已经躺了大半年了。现在终于可以刷进去了。怎么从wndr4300原版刷成op的纯净系统我就不说了,而且我已经让卖家卖给我之前就刷好一个CC版15.05.1的纯净系统,这个系统是我在恩山上找的,这里感谢一下作者xmit0806,该固件的帖子地址:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=186099
这个固件作者说支持了128M闪存(op官方版只支持32m闪存,浪费了90多mb),用dnsmasq-full替换了dnsmasq,添加了opkg软件源等,都是非常实用的。
注:如果刷该固件重启后不保留配置,重新用TFTP的方式刷一遍就好了,我就碰到过这个情况。还有虽然这个版本是15.05.1,但是使用15.05 SDK编译出来的ipk一样能用
好了言归正传,现在开始安装之前编译好的ipk包了。
首先看一下没安装之前的状态
看起来的确是很纯净,一个“服务”都没装,而且内存的空余很大,从上图可以看出,该机器之前没有安装ss-local服务
然后我通过winscp把编译好的ipk包上传到用户目录/root上去
这里winscp还有一些小坑,首先你的路由器必须设置了登陆密码才能用SSH登陆,SSH的用户名和密码就是路由器的登录名和登陆密码,这个在一进路由器后台就会用黄色的框提示你,直接修改就好,我选的登录名为root,密码为root,所以用户目录就变成了/root
还有winscp必须设置成scp协议,使用Ubuntu支持的sftp协议是登陆不进去的
然后我抱着必错的信念开始用opkg安装
果然不出我所料报错了,不过并不是什么大的问题,缺少两个依赖库,libpcre和libpthread
那怎么装这两个依赖包呢,手头有没有他们的ipk包。但是隐隐记得这个固件的作者添加了软件源,于是我打算拼死一搏
一搏有效,通过更新软件源的命令已经成功更新了base包和luci包,packages包更新太慢停掉就行,重要的是base
于是我根据上面的提示主动去openwrt的官网上去找packages包,找到了libpcre的依赖
还真让我找到了,赶紧下载下来放到路由器上(中间那个libpcre_8.38-1_ar71xx.ipk就是我们要用的)
注:packages包里要用的就它一个了,剩下的都在base包里
好了,解决了一个依赖,让我们先安装这个依赖再继续安装ss吧
哎呦,忘了还有一个依赖,opkg虽然下载的很慢,但是贴心的把这个依赖包的下载地址给打印出来了,那我就直接用迅雷下好放进去得了
放好了,我们开始安装吧
上图显示Openwrt已经成功安装了剩下的一个依赖和ss,看来我们SDK编译还是很成功的
现在让我们运行一下ss-local检验一下是否安装成功
ss-local有反应了,看来安装已经彻底成功了。
下面我们检查一下ss-redir的透明代理功能是不是好用,首先我们编写一个ss服务器的配置文件,监听0.0.0.0:1080(注意不能是127.0.0.1或内网地址,否则iptables无法转发)
然后调用ss-redir去执行该配置文件
看样子是启动成功了,而且最新版的Shadowsocks-libev可以使用-u参数支持udp转发,让我们再用netstat看看1080端口的情况
可以看出来,udp和tcp的1080端口均被ss-redir占用,说明启动成功了,下面只要配合iptables的转发就实现了透明代理了
上面只是一个简略版,完整的应该如下
- iptables -t nat -A PREROUTING -d 127.0.0.0/24 -j RETURN
- iptables -t nat -A PREROUTING -d 192.168.0.0/16 -j RETURN
- iptables -t nat -A PREROUTING -d 10.42.0.0/16 -j RETURN
- iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN
- iptables -t nat -A PREROUTING -d 10.0.0.0/8 -j RETURN
- iptables -t nat -A PREROUTING -d 172.16.0.0/12 -j RETURN
- iptables -t nat -A PREROUTING -d 224.0.0.0/4 -j RETURN
- iptables -t nat -A PREROUTING -d 240.0.0.0/4 -j RETURN
- iptables -t nat -A PREROUTING -d 169.254.0.0/16 -j RETURN
- iptables -t nat -A PREROUTING -p tcp -s 192.168.1.1/16 -j REDIRECT –to-ports 1080
然后用手机百度搜索ip,已经换成代理的ip啦。更宝贵的是ss-redir自带DNS防污染功能,访问谷歌,facebook神马的都畅通无阻啦,然后我们再测个速研究一下路由器的负载能力(我是20M光纤)
看起来是非常不错的,几乎可以把带宽跑满
下面我们再去路由器后台看看进程
我们刚才执行的指令ss-redir已经显示在UI界面上了
到这ss的透明代理已经全部搞定了,但是有些人不喜欢用命令行去配置,而喜欢在路由器后台使用luci界面,于是我们把之前编译好的luci界面也装上吧
于是把luci的ipk传到路由器上去准备安装
没想到luci界面也需要依赖库,一看是ipset,是非常有用的东西,通过ipset可以配置dnsmasq-full通过域名进行代理规则的书写,可以克服iptables只能识别ip的短板
既然上面已经给出了ipk的下载地址,opkg下载的还这么慢,那我干脆继续用迅雷上吧,装上ipset以后我们继续
安装ipset居然也需要依赖包,是libmnl,同样办法先把这个装了再装ipset吧,没出现循环依赖就不错啦
果然解决了这两个依赖以后luci界面就装好了,让我们进路由器后台瞅瞅
呈贡啦,菜单多了一项“服务”,“影梭”就在里面,让我们点进去看看
果然是最新的luci和最新的ss,支持udp转发啦,可惜上面显示udp转发不可用,缺少依赖,这多亏了有luci,不然我还不知道我这udp转发没法用。
据我判断缺少的肯定是iptables-mod-tproxy,因为ip默认已经装载Openwrt里了,于是老办法,去Openwrt的官网找找去
果然配好软件源的opkg又帮我们自动定位到了下载地址,老办法迅雷上
好啦,这个udp转发的依赖已经顺利安装完毕了,我们刷新路由器后台看看
好啦,现在luci界面已经完美支持udp转发啦!整个教程到此结束,我把这次安装所用到的所有ipk包放在下面供大家免费下载,理论上说CC版15.05 wndr4300设备都可以通用的。
下图是我用到所有的ipk包
下面面的ip和shadowsocks-libev-polarssl应该不装,polarss支持的加密方式少,比如没有rc4-md5这种加密方式,推荐使用openssl版本也就是我上面说的版本,ip包Openwrt应该默认自带,如果没有的话可以安装,因为我没装过这个ip包不知道好不好用,其他的包按照依赖关系一个一个装上即可,推荐在CC 15.05.1的wndr4300纯净系统上安装,纯净系统可以用上面恩山大神的那个
下载地址:
Openwrt_wndr4300_CC_15.05.1_SS_luci用到的ipk包
下面再秀一下刚买的wndr4300
附:因为没安装ccache导致的无法编译的config.log
- This file contains any messages produced by compilers while
- running configure, to aid debugging if configure makes a mistake.
- It was created by PCRE configure 8.39, which was
- generated by GNU Autoconf 2.69. Invocation command line was
- $ ./configure –target=mips-openwrt-linux –host=mips-openwrt-linux –build=x86_64-linux-gnu –program-prefix= –program-suffix= –prefix=/usr –exec-prefix=/usr –bindir=/usr/bin –sbindir=/usr/sbin –libexecdir=/usr/lib –sysconfdir=/etc –datadir=/usr/share –localstatedir=/var –mandir=/usr/man –infodir=/usr/info –disable-nls –enable-utf8 –enable-unicode-properties –enable-pcre16 –enable-cpp
- ## ——— ##
- ## Platform. ##
- ## ——— ##
- hostname = alex-ThinkPad-T430
- uname -m = x86_64
- uname -r = 4.4.0-36-generic
- uname -s = Linux
- uname -v = #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016
- /usr/bin/uname -p = unknown
- /bin/uname -X = unknown
- /bin/arch = unknown
- /usr/bin/arch -k = unknown
- /usr/convex/getsysinfo = unknown
- /usr/bin/hostinfo = unknown
- /bin/machine = unknown
- /usr/bin/oslevel = unknown
- /bin/universe = unknown
- PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/host/bin
- PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin
- PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin
- PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin
- PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin
- PATH: /usr/local/java/jdk1.8.0_91/bin
- PATH: /opt/android-studio/gradle/gradle-2.14.1/bin
- PATH: /usr/local/sbin
- PATH: /usr/local/bin
- PATH: /usr/sbin
- PATH: /usr/bin
- PATH: /sbin
- PATH: /bin
- PATH: /usr/games
- PATH: /usr/local/games
- PATH: /snap/bin
- ## ———– ##
- ## Core tests. ##
- ## ———– ##
- configure:2666: loading site script /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/include/site/mips
- | #!/bin/sh
- | . $TOPDIR/include/site/linux
- | ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
- | ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
- |
- | ac_cv_sizeof___int64=0
- | ac_cv_sizeof_char=1
- | ac_cv_sizeof_int=4
- | ac_cv_sizeof_int16_t=2
- | ac_cv_sizeof_int32_t=4
- | ac_cv_sizeof_int64_t=8
- | ac_cv_sizeof_long_int=4
- | ac_cv_sizeof_long_long=8
- | ac_cv_sizeof_long=4
- | ac_cv_sizeof_off_t=8
- | ac_cv_sizeof_short_int=2
- | ac_cv_sizeof_short=2
- | ac_cv_sizeof_size_t=4
- | ac_cv_sizeof_ssize_t=4
- | ac_cv_sizeof_u_int16_t=2
- | ac_cv_sizeof_u_int32_t=4
- | ac_cv_sizeof_u_int64_t=8
- | ac_cv_sizeof_uint16_t=2
- | ac_cv_sizeof_uint32_t=4
- | ac_cv_sizeof_uint64_t=8
- | ac_cv_sizeof_unsigned_int=4
- | ac_cv_sizeof_unsigned_long=4
- | ac_cv_sizeof_unsigned_long_long=8
- | ac_cv_sizeof_unsigned_short=2
- | ac_cv_sizeof_void_p=4
- configure:2808: checking for a BSD-compatible install
- configure:2876: result: /usr/bin/install -c
- configure:2887: checking whether build environment is sane
- configure:2942: result: yes
- configure:3001: checking for mips-openwrt-linux-strip
- configure:3028: result: mips-openwrt-linux-uclibc-strip
- configure:3093: checking for a thread-safe mkdir -p
- configure:3132: result: /bin/mkdir -p
- configure:3139: checking for gawk
- configure:3155: found /usr/bin/gawk
- configure:3166: result: gawk
- configure:3177: checking whether make sets $(MAKE)
- configure:3199: result: yes
- configure:3228: checking whether make supports nested variables
- configure:3245: result: yes
- configure:3383: checking whether make supports nested variables
- configure:3400: result: yes
- configure:3428: checking for style of include used by make
- configure:3456: result: GNU
- configure:3487: checking for mips-openwrt-linux-gcc
- configure:3514: result: ccache_cc
- configure:3783: checking for C compiler version
- configure:3792: ccache_cc –version >&5
- /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
- configure:3803: $? = 127
- configure:3792: ccache_cc -v >&5
- /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
- configure:3803: $? = 127
- configure:3792: ccache_cc -V >&5
- /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
- configure:3803: $? = 127
- configure:3792: ccache_cc -qversion >&5
- /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
- configure:3803: $? = 127
- configure:3823: checking whether the C compiler works
- configure:3845: ccache_cc -Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib conftest.c >&5
- /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
- configure:3849: $? = 127
- configure:3887: result: no
- configure: failed program was:
- | /* confdefs.h */
- | #define PACKAGE_NAME “PCRE”
- | #define PACKAGE_TARNAME “pcre”
- | #define PACKAGE_VERSION “8.39”
- | #define PACKAGE_STRING “PCRE 8.39”
- | #define PACKAGE_BUGREPORT “”
- | #define PACKAGE_URL “”
- | #define PACKAGE “pcre”
- | #define VERSION “8.39”
- | /* end confdefs.h. */
- |
- | int
- | main ()
- | {
- |
- | ;
- | return 0;
- | }
- configure:3892: error: in `/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39′:
- configure:3894: error: C compiler cannot create executables
- See `config.log’ for more details
- ## —————- ##
- ## Cache variables. ##
- ## —————- ##
- ac_cv_c_bigendian=yes
- ac_cv_c_gettext_without_libintl=yes
- ac_cv_c_littleendian=no
- ac_cv_c_long_double=no
- ac_cv_conv_longlong_to_float=yes
- ac_cv_env_CCC_set=
- ac_cv_env_CCC_value=
- ac_cv_env_CC_set=set
- ac_cv_env_CC_value=ccache_cc
- ac_cv_env_CFLAGS_set=set
- ac_cv_env_CFLAGS_value=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
- ac_cv_env_CPPFLAGS_set=set
- ac_cv_env_CPPFLAGS_value=‘-I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include ‘
- ac_cv_env_CPP_set=
- ac_cv_env_CPP_value=
- ac_cv_env_CXXCPP_set=
- ac_cv_env_CXXCPP_value=
- ac_cv_env_CXXFLAGS_set=set
- ac_cv_env_CXXFLAGS_value=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
- ac_cv_env_CXX_set=set
- ac_cv_env_CXX_value=ccache_cxx
- ac_cv_env_GENHTML_set=
- ac_cv_env_GENHTML_value=
- ac_cv_env_LCOV_set=
- ac_cv_env_LCOV_value=
- ac_cv_env_LDFLAGS_set=set
- ac_cv_env_LDFLAGS_value=‘-L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib ‘
- ac_cv_env_LIBS_set=
- ac_cv_env_LIBS_value=
- ac_cv_env_PKG_CONFIG_LIBDIR_set=set
- ac_cv_env_PKG_CONFIG_LIBDIR_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig
- ac_cv_env_PKG_CONFIG_PATH_set=set
- ac_cv_env_PKG_CONFIG_PATH_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig
- ac_cv_env_PKG_CONFIG_set=set
- ac_cv_env_PKG_CONFIG_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/pkg-config
- ac_cv_env_VALGRIND_CFLAGS_set=
- ac_cv_env_VALGRIND_CFLAGS_value=
- ac_cv_env_VALGRIND_LIBS_set=
- ac_cv_env_VALGRIND_LIBS_value=
- ac_cv_env_build_alias_set=set
- ac_cv_env_build_alias_value=x86_64-linux-gnu
- ac_cv_env_host_alias_set=set
- ac_cv_env_host_alias_value=mips-openwrt-linux
- ac_cv_env_target_alias_set=set
- ac_cv_env_target_alias_value=mips-openwrt-linux
- ac_cv_file__dev_zero=yes
- ac_cv_func___adjtimex=yes
- ac_cv_func___va_copy=no
- ac_cv_func__exit=yes
- ac_cv_func_bcmp=yes
- ac_cv_func_bcopy=yes
- ac_cv_func_bzero=yes
- ac_cv_func_cimag=yes
- ac_cv_func_creal=yes
- ac_cv_func_fchmod=yes
- ac_cv_func_getaddrinfo=yes
- ac_cv_func_getcwd=yes
- ac_cv_func_getdomainname=yes
- ac_cv_func_getpgrp_void=yes
- ac_cv_func_getpwuid_r=yes
- ac_cv_func_gettimeofday=yes
- ac_cv_func_index=yes
- ac_cv_func_lstat=yes
- ac_cv_func_lstat_dereferences_slashed_symlink=yes
- ac_cv_func_lstat_empty_string_bug=no
- ac_cv_func_malloc_0_nonnull=yes
- ac_cv_func_malloc_works=yes
- ac_cv_func_memcmp_clean=yes
- ac_cv_func_memcmp_working=yes
- ac_cv_func_posix_getgrgid_r=yes
- ac_cv_func_posix_getpwuid_r=yes
- ac_cv_func_psignal=yes
- ac_cv_func_pthread_key_delete=yes
- ac_cv_func_realloc_0_nonnull=yes
- ac_cv_func_realloc_works=yes
- ac_cv_func_rename=yes
- ac_cv_func_rindex=yes
- ac_cv_func_setgrent_void=yes
- ac_cv_func_setlocale=yes
- ac_cv_func_setpgrp_void=yes
- ac_cv_func_setresuid=no
- ac_cv_func_setvbuf_reversed=no
- ac_cv_func_stat_empty_string_bug=no
- ac_cv_func_stat_ignores_trailing_slash=no
- ac_cv_func_strerror=yes
- ac_cv_func_strftime=yes
- ac_cv_func_utimes=yes
- ac_cv_func_va_copy=no
- ac_cv_func_vsnprintf=yes
- ac_cv_have_accrights_in_msghdr=no
- ac_cv_have_broken_snprintf=no
- ac_cv_have_control_in_msghdr=yes
- ac_cv_have_decl_sys_siglist=no
- ac_cv_have_openpty_ctty_bug=yes
- ac_cv_have_space_d_name_in_struct_dirent=yes
- ac_cv_header_netinet_sctp_h=no
- ac_cv_header_netinet_sctp_uio_h=no
- ac_cv_int64_t=yes
- ac_cv_lbl_unaligned_fail=no
- ac_cv_linux_kernel_pppoe=yes
- ac_cv_linux_vers=2
- ac_cv_pack_bitfields_reversed=yes
- ac_cv_path_LDCONFIG=
- ac_cv_path_install=‘/usr/bin/install -c’
- ac_cv_path_mkdir=/bin/mkdir
- ac_cv_prog_AWK=gawk
- ac_cv_prog_CC=ccache_cc
- ac_cv_prog_STRIP=mips-openwrt-linux-uclibc-strip
- ac_cv_prog_make_make_set=yes
- ac_cv_regexec_segfault_emptystr=no
- ac_cv_sctp=no
- ac_cv_sizeof___int64=0
- ac_cv_sizeof_char=1
- ac_cv_sizeof_int16_t=2
- ac_cv_sizeof_int32_t=4
- ac_cv_sizeof_int64_t=8
- ac_cv_sizeof_int=4
- ac_cv_sizeof_long=4
- ac_cv_sizeof_long_int=4
- ac_cv_sizeof_long_long=8
- ac_cv_sizeof_off_t=8
- ac_cv_sizeof_short=2
- ac_cv_sizeof_short_int=2
- ac_cv_sizeof_size_t=4
- ac_cv_sizeof_ssize_t=4
- ac_cv_sizeof_u_int16_t=2
- ac_cv_sizeof_u_int32_t=4
- ac_cv_sizeof_u_int64_t=8
- ac_cv_sizeof_uint16_t=2
- ac_cv_sizeof_uint32_t=4
- ac_cv_sizeof_uint64_t=8
- ac_cv_sizeof_unsigned_int=4
- ac_cv_sizeof_unsigned_long=4
- ac_cv_sizeof_unsigned_long_long=8
- ac_cv_sizeof_unsigned_short=2
- ac_cv_sizeof_void_p=4
- ac_cv_sys_restartable_syscalls=yes
- ac_cv_time_r_type=POSIX
- ac_cv_type_suseconds_t=yes
- ac_cv_uchar=no
- ac_cv_uint64_t=yes
- ac_cv_uint=yes
- ac_cv_ulong=yes
- ac_cv_ushort=yes
- ac_cv_va_copy=C99
- ac_cv_va_val_copy=yes
- am_cv_make_support_nested_variables=yes
- as_cv_unaligned_access=yes
- ## —————– ##
- ## Output variables. ##
- ## —————– ##
- ACLOCAL=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing aclocal-1.15’
- AMDEPBACKSLASH=‘\’
- AMDEP_FALSE=‘#’
- AMDEP_TRUE=”
- AMTAR=‘$${TAR-tar}’
- AM_BACKSLASH=‘\’
- AM_DEFAULT_V=‘0’
- AM_DEFAULT_VERBOSITY=‘0’
- AM_V=‘0’
- AR=‘mips-openwrt-linux-uclibc-gcc-ar’
- AS=‘ccache_cc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -fpic’
- AUTOCONF=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing autoconf’
- AUTOHEADER=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing autoheader’
- AUTOMAKE=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing automake-1.15’
- AWK=‘gawk’
- CC=‘ccache_cc’
- CCDEPMODE=”
- CFLAGS=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
- CPP=”
- CPPFLAGS=‘-I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include ‘
- CXX=‘ccache_cxx’
- CXXCPP=”
- CXXDEPMODE=”
- CXXFLAGS=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
- CYGPATH_W=‘echo’
- DEFS=”
- DEPDIR=‘.deps’
- DISTCHECK_CONFIGURE_FLAGS=”
- DLLTOOL=”
- DSYMUTIL=”
- DUMPBIN=”
- ECHO_C=”
- ECHO_N=‘-n’
- ECHO_T=”
- EGREP=”
- EXEEXT=”
- EXTRA_LIBPCRE16_LDFLAGS=”
- EXTRA_LIBPCRE32_LDFLAGS=”
- EXTRA_LIBPCRECPP_LDFLAGS=”
- EXTRA_LIBPCREPOSIX_LDFLAGS=”
- EXTRA_LIBPCRE_LDFLAGS=”
- FGREP=”
- GCOV_CFLAGS=”
- GCOV_CXXFLAGS=”
- GCOV_LIBS=”
- GENHTML=”
- GREP=”
- HAVE_VISIBILITY=”
- INSTALL_DATA=‘${INSTALL} -m 644’
- INSTALL_PROGRAM=‘${INSTALL}’
- INSTALL_SCRIPT=‘${INSTALL}’
- INSTALL_STRIP_PROGRAM=‘$(install_sh) -c -s’
- LCOV=”
- LD=‘mips-openwrt-linux-uclibc-ld’
- LDFLAGS=‘-L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib ‘
- LIBBZ2=”
- LIBOBJS=”
- LIBREADLINE=”
- LIBS=”
- LIBTOOL=”
- LIBZ=”
- LIPO=”
- LN_S=”
- LTLIBOBJS=”
- MAKEINFO=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing makeinfo’
- MANIFEST_TOOL=”
- MKDIR_P=‘/bin/mkdir -p’
- NM=‘mips-openwrt-linux-uclibc-gcc-nm’
- NMEDIT=”
- OBJDUMP=‘mips-openwrt-linux-uclibc-objdump’
- OBJEXT=”
- OTOOL64=”
- OTOOL=”
- PACKAGE=‘pcre’
- PACKAGE_BUGREPORT=”
- PACKAGE_NAME=‘PCRE’
- PACKAGE_STRING=‘PCRE 8.39’
- PACKAGE_TARNAME=‘pcre’
- PACKAGE_URL=”
- PACKAGE_VERSION=‘8.39’
- PATH_SEPARATOR=‘:’
- PCRE_DATE=”
- PCRE_MAJOR=”
- PCRE_MINOR=”
- PCRE_PRERELEASE=”
- PCRE_STATIC_CFLAG=”
- PKG_CONFIG=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/pkg-config’
- PKG_CONFIG_LIBDIR=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig’
- PKG_CONFIG_PATH=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig’
- PTHREAD_CC=”
- PTHREAD_CFLAGS=”
- PTHREAD_LIBS=”
- RANLIB=‘mips-openwrt-linux-uclibc-gcc-ranlib’
- SED=”
- SET_MAKE=”
- SHELL=‘/bin/bash’
- SHTOOL=”
- STRIP=‘mips-openwrt-linux-uclibc-strip’
- VALGRIND_CFLAGS=”
- VALGRIND_LIBS=”
- VERSION=‘8.39’
- VISIBILITY_CFLAGS=”
- VISIBILITY_CXXFLAGS=”
- WITH_GCOV_FALSE=”
- WITH_GCOV_TRUE=”
- WITH_JIT_FALSE=”
- WITH_JIT_TRUE=”
- WITH_PCRE16_FALSE=”
- WITH_PCRE16_TRUE=”
- WITH_PCRE32_FALSE=”
- WITH_PCRE32_TRUE=”
- WITH_PCRE8_FALSE=”
- WITH_PCRE8_TRUE=”
- WITH_PCRE_CPP_FALSE=”
- WITH_PCRE_CPP_TRUE=”
- WITH_REBUILD_CHARTABLES_FALSE=”
- WITH_REBUILD_CHARTABLES_TRUE=”
- WITH_UTF_FALSE=”
- WITH_UTF_TRUE=”
- WITH_VALGRIND_FALSE=”
- WITH_VALGRIND_TRUE=”
- ac_ct_AR=”
- ac_ct_CC=”
- ac_ct_CXX=”
- ac_ct_DUMPBIN=”
- am__EXEEXT_FALSE=”
- am__EXEEXT_TRUE=”
- am__fastdepCC_FALSE=”
- am__fastdepCC_TRUE=”
- am__fastdepCXX_FALSE=”
- am__fastdepCXX_TRUE=”
- am__include=‘include’
- am__isrc=”
- am__leading_dot=‘.’
- am__nodep=‘_no’
- am__quote=”
- am__tar=‘
TAR−tarchof−“TAR−tarchof−”
tardir”‘
- am__untar=‘$${TAR-tar} xf -‘
- ax_pthread_config=”
- bindir=‘/usr/bin’
- build=‘x86_64-linux-gnu’
- build_alias=‘x86_64-linux-gnu’
- build_cpu=”
- build_os=”
- build_vendor=”
- datadir=‘/usr/share’
- datarootdir=‘${prefix}/share’
- docdir=‘${datarootdir}/doc/${PACKAGE_TARNAME}’
- dvidir=‘${docdir}’
- enable_cpp=‘yes’
- enable_pcre16=‘yes’
- enable_pcre32=”
- enable_pcre8=”
- exec_prefix=‘/usr’
- host=‘mips-openwrt-linux’
- host_alias=‘mips-openwrt-linux’
- host_cpu=”
- host_os=”
- host_vendor=”
- htmldir=‘${docdir}’
- includedir=‘${prefix}/include’
- infodir=‘/usr/info’
- install_sh=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/install-sh’
- libdir=‘${exec_prefix}/lib’
- libexecdir=‘/usr/lib’
- localedir=‘${datarootdir}/locale’
- localstatedir=‘/var’
- mandir=‘/usr/man’
- mkdir_p=‘$(MKDIR_P)’
- oldincludedir=‘/usr/include’
- pcre_have_bits_type_traits=”
- pcre_have_long_long=”
- pcre_have_type_traits=”
- pcre_have_ulong_long=”
- pdfdir=‘${docdir}’
- prefix=‘/usr’
- program_transform_name=‘s&$$&&;s&^&&’
- psdir=‘${docdir}’
- sbindir=‘/usr/sbin’
- sharedstatedir=‘${prefix}/com’
- sysconfdir=‘/etc’
- target_alias=‘mips-openwrt-linux’
- ## ———– ##
- ## confdefs.h. ##
- ## ———– ##
- /* confdefs.h */
- #define PACKAGE_NAME “PCRE”
- #define PACKAGE_TARNAME “pcre”
- #define PACKAGE_VERSION “8.39”
- #define PACKAGE_STRING “PCRE 8.39”
- #define PACKAGE_BUGREPORT “”
- #define PACKAGE_URL “”
- #define PACKAGE “pcre”
- #define VERSION “8.39”
- configure: exit 77
PandoraBox/LEDE SDK交叉编译OpenWrt ipk安装包的方法
https://blog.csdn.net/lvshaorong/article/details/62215033
所以跳过潘多拉或者LEDE SDK的大坑其实不麻烦,只要正确的导入第三方依赖库并配置好本地开发环境即可,下面我以Ubuntu16.04 LTS 64位为例介绍一下潘多拉/LEDE相比OpenWrt SDK可能会碰到的问题。主要目的是解决在OpenWrt下能成功编译到了潘多拉或者LEDE就无法编译的问题。如果OpenWrt SDK也无法编译则不在本文的讨论范围之内。
(注意:请不要使用32位操作系统,否则make menuconfig打不开,也不推荐使用Ubuntu14.04,16.10等版本,因为这些系统上失败的案例较多且不好解决)
首先以潘多拉SDK为例,潘多拉16-10稳定版的固件和SDK下载地址为:http://downloads.pandorabox.com.cn/pandorabox-16-10-stable/targets/ralink/ ,可以选择mt7620 和 mt7621两个平台的固件和SDK下载,本文以小米路由器mini为例所以使用的是mt7620的SDK, rt305x芯片如华为HG255D只提供了固件没有提供toolchain或SDK,所以不在本文讨论范围之内。
我们向往常一样解压潘多拉的SDK,然后克隆一个项目的Makefile到package目录下,这里以SSR为例
git clone https://github.com/AlexZhuo/openwrt-shadowsocksr.git package/shadowsocksr-libev
然后选择要编译的IPK安装包
make menuconfig
然后执行编译
make package/shadowsocksr-libev/compile V=99
然后SDK就开始克隆项目的源代码到本地,这里的动作主要是把Makefile指明的源代码的tar.gz压缩包下载到SDK/dl目录中(如果网络不好可以直接从别的地方下载tar.gz源码包然后复制到dl目录下)然后把源码解压到SDK/build_dir/target-mipsel_24kc_musl-1.1.16/下面去,如果因为源码有问题导致编译不成功可以直接在这里修改源代码,这一步还算正常
迎面向我们走来的是第一个报错
- configure: loading site script /home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/include/site/mipsel
- checking for mipsel-openwrt-linux-gcc… mipsel-openwrt-linux-uclibc-gcc
- checking whether the C compiler works… no
- configure: error: in `/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6′:
- configure: error: C compiler cannot create executables
- See `config.log’ for more details
- Makefile:135: recipe for target ‘/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy’ failed
意思是C编译器不工作,这个一般是编译环境搭建有问题,但是明明OP的SDK是可以编译的,说明编译环境并没有出问题。但是这个报错并没有指出到底哪里出的错,要修改也无从下手。它还让我们找config.log这个文件看详细日志,可找了半天也没找到这个文件在哪。实在天坑。于是为了判断问题出在哪里,我们克隆redsocks2的源码手动指定编译器和连接器来看详细日志。做法如下:首先克隆redsocks2的源码,那为啥要选redsocks2的源码呢?原因是redsocks2可以通过make直接编译出可执行文件,可以很方便的检查哪里除了问题,而ssr make要添加参数,依赖库也太多,不方便调试错误
- git clone https://github.com/semigodking/redsocks.git package/redsocks
然后切换到源码目录
- cd package/redsocks
然后手动指定编译器和连接器,通过声明当前Shell的环境变量实现
- export PATH=$PATH:/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin
- export STAGING_DIR=/store/build/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x
- export CFLAGS=”-I/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/usr/include/ -L/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/usr/lib”
然后通过编译器和连接器手动交叉编译可执行文件
- make CC=mipsel-openwrt-linux-uclibc-gcc LD=mipsel-openwrt-linux-uclibc-ld
然后发现真实错误终于暴露出来了
- /home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin/../libexec/gcc/mipsel-openwrt-linux-uclibc/4.8.3/cc1: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
- <builtin>: recipe for target ‘parser.o’ failed
- make: *** [parser.o] Error 1
这个潘多拉的SDK其实就是在我的电脑上找不到libisl.so.10 这个文件,那么这个文件上哪了呢?为啥OP就不会报出这个错误呢?首先来找一下这个文件
- locate libisl.so
输出
- /usr/lib/x86_64-linux-gnu/libisl.so
- /usr/lib/x86_64-linux-gnu/libisl.so.15
- /usr/lib/x86_64-linux-gnu/libisl.so.15.1.1
发现这几个文件都在同一个目录下,仔细一看还能发现,libisl.so.15和libisl.so这两个文件都是libisl.so.15.1.1的软链接。换句话说这三个文件其实是一个文件。那么现在可以试试让libisl.so.10也软链接到libisl.so.15.1.1这个文件试试可以不
- sudo ln -s /usr/lib/x86_64-linux-gnu/libisl.so.15.1.1 /usr/lib/x86_64-linux-gnu/libisl.so.10
然后再执行编译的命令,发现这个问题已经不见了,说明有效果。刚才克隆的一大堆代码,又手动指定了编译连接器,最后其实就建立一个软链接就把这个问题解决了。这个大坑的解决成本相当高。此处还应该感谢redsocks2这个项目送走了这个bug,我们继续编译SSR吧。不过马上又迎来了新的报错
- checking for pcre-config… pcre-config
- checking for pcre headers in … not found
- checking for library containing pcre_exec… no
- configure: error: Cannot find pcre library. Configure –with-pcre=DIR
- Makefile:135: recipe for target ‘/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy’ failed
- make[2]: *** [/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy] Error 1
这意思是找不到pcre这个依赖库啊。这个好说,只要把相应的feeds安装到SDK里就可以。在OpenWrt/LEDE 的SDK里,只要执行
- ./scripts/feeds update base packages
就会在SDK根目录下新建一个feeds文件夹,然后里面会有base和package两个文件夹,里面都是OpenWrt提前写好的各个依赖库的Makefile编译文件。然后使用
- ./scripts/feeds install libpcre
就会在package目录下建立一个feeds文件夹,然后把libpcre的Makefile文件通过软链接链接过去,在碰到编译时需要依赖库的情况时就会自动链接相应的源码进行编译了。即使官方没有相应的Makefile源码,也可以自己在feeds里建立相应三方库的Makefile。
但是在潘多拉的SDK中执行update命令后根本没有反应,也没有建立feeds文件夹这时怎么回事呢,这里update过程是联网的,克隆地址记录在SDK根目录下的feeds.conf.default文件里面,在LEDE 17.01上这个文件中的内容是
- src-git base https://git.lede-project.org/source.git;v17.01.0
- src-git packages https://git.lede-project.org/feed/packages.git^ed90827282851ad93294e370860320f1af428bb2
- src-git luci https://git.lede-project.org/project/luci.git^a100738163585ae1edc24d832ca9bef1f34beef0
- src-git routing https://git.lede-project.org/feed/routing.git^dd36dd47bbd75defcb3c517cafe7a19ee425f0af
- src-git telephony https://git.lede-project.org/feed/telephony.git^1f0fb2538ba6fc306198fe2a9a4b976d63adb304
由于这个文件指向的地址都是各个应用程序的Makefile文件而不是二进制文件,所以这个文件其实是在LEDE/OpenWrt/潘多拉中通用的。因为所有的SDK都可以通过同一个Makefile文件编译相应的ipk包。但是在潘多拉SDK中,feeds.conf.default这个文件里面居然是空的。那么当然就无法通过传统的方法部署相应第三方依赖库的源码了,所以我们这里只要把LEDE SDK中的feeds.conf.default文件内容复制到潘多拉SDK中去就可以了
然后再执行update和install命令,相应的依赖库就会出现在package/feeds中了
然后把/feeds中的libpcre的Makefile做软链接到package/feeds中,使用
- ./scripts/feeds install libpcre
package/feeds 下面出现相应的目录就说明安装成功了。
然后我们观察ssr Makefile中的依赖库,发现除了pcre之外,还有另外的三个依赖库
- define Package/shadowsocksr-libev
- $(call Package/shadowsocksr-libev/Default)
- TITLE+= (OpenSSL)
- VARIANT:=openssl
- DEPENDS:=+libopenssl +libpcre +libpthread +zlib
- endef
所以我们要都安装一下(mBedTLS版需要自己的依赖包)
./scripts/feeds install zlib libopenssl libmbedtls
此时如果你网络状况好的话,一半就可以畅通无阻的编译了。真是谢天谢地潘多拉提供的toolchain还没有问题
这个过程中,SDK会首先根据第三方依赖库Makefile中记载的源码地址去下载相应源码,然后通过这些源码先编译出第三方依赖库,并将相应的ipk文件放到bin目录下。
然后再使用第三方依赖库的源码编译我们所需的应用程序。
注意如果始终无法安装feeds的情况,直接去feeds文件夹下搜索pcre,然后把pcre这个文件夹复制到package/feeds下面也是可以的。
举例来说,比如libpolarssl这个库已经被mBedTLS替代,所以当执行./scripts/feeds install libpolarssl 的时候,会碰到如下报错,说明在feeds中找不到libpolarssl这个依赖库
WARNING: No feed for package ‘libpolarssl’ found, maybe it’s already part of the standard packages?
此时我们去其他地方搜索libpolarssl的Makefile或者自己编写,这里提供一个libpolarssl的Makefile:https://github.com/AlexZhuo/openwrt-feeds/tree/master/base/polarssl
同理,在我们编译redsocks2的时候可能会碰到以下错误
- utils.h:7:26: fatal error: event2/event.h: No such file or directory
- #include <event2/event.h>
- ^
- compilation terminated.
- <builtin>: recipe for target ‘parser.o’ failed
- make[3]: *** [parser.o] Error 1
这个报错和上面的pcre一样,也是找不到libevent这个第三方依赖库,执行./scripts/feeds install libevent2 即可解决其他报错一般可以用相同的办法解决。包括LEDE
关于LEDE要提示一点,LEDE 17.01的rc1和rc2 目前好像feeds不是很全,推荐使用17.01版本,不要使用rc1或rc2的SDK。
同时LEDE的feeds中很多库的版本要高于OpenWrt CC 15.05.1,所以可以把OP的feeds库换成LEDE的然后重新./scripts/feeds update