ASUS_meilin的交叉编译、问题及解决方案
编译环境
- digitalocean新加坡节点
- swap=5G(为了防止编译时内存不足
- ubuntu(14.04x64)edition(16.04官方的wiki依赖有变化,有些包失效了
安装和准备(As root)
一大堆的依赖:
1
2
3
4
5
6
7apt-get install autoconf automake bash bison bzip2 diffutils file flex m4 \
g++ gawk groff-base libncurses-dev libtool libslang2 make patch perl pkg-config \
shtool subversion tar texinfo zlib1g zlib1g-dev git-core gettext libexpat1-dev \
libssl-dev cvs gperf unzip python libxml-parser-perl gcc-multilib gconf-editor \
libxml2-dev g++-4.4 g++-multilib gitk libncurses5 mtd-utils libncurses5-dev \
libstdc++6-4.4-dev libvorbis-dev g++-4.4-multilib git autopoint autogen sed \
build-essential intltool libelf1:i386 libglib2.0-devx64版本需要:
1
sudo apt-get install lib32z1-dev lib32stdc++6
下载到指定位置(这里是/root)
1
2cd /root
git clone https://github.com/RMerl/asuswrt-merlin.git处理环境
1
2sudo ln -s ~/asuswrt-merlin/tools/brcm /opt/brcm
sudo ln -s ~/asuswrt-merlin/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3 /opt/brcm-arm
1 | export PATH=$PATH:/opt/brcm/hndtools-mipsel-linux/bin:/opt/brcm/hndtools-mipsel-uclibc/bin:/opt/brcm-arm/bin |
编译Netkeeper(以我的AC-56U为例)
1 | cd ~/asuswrt-merlin/release/src-rt-6.x.4708 && make clean |
- 下载Openwrt-NetKeeper源码
1
git clone https://github.com/miao1007/Openwrt-NetKeeper.git
修改makefile里面location的PATH为如下内容
1 | LOCATION=../../toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3 |
准备就绪,make all
编译,提示如下错误
1 | /root/asuswrt-merlin/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/../libexec/gcc/arm-brcm-linux-uclibcgnueabi/4.5.3/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory |
按照提示看来是某个库没有好好处理
键入:ldd /opt/brcm-arm/libexec/gcc/arm-brcm-linux-uclibcgnueabi/4.5.3/cc1
得到如下信息
1 | linux-gate.so.1 => (0xf779b000) |
看来是PATH没设置好,在/opt/brcm-arm/lib目录下有需要的so文件,但没有默认指向这个文件夹,那就设置一下
1 | export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/brcm-arm/lib:/usr/local/lib:/usr/lib |
键入:ldd /opt/brcm-arm/libexec/gcc/arm-brcm-linux-uclibcgnueabi/4.5.3/cc1
得到如下信息:
1 | linux-gate.so.1 => (0xf774e000) |
最后再make all一下,正常编译出来结果
最后说明,其实在搜寻的时候,默认会只搜寻/usr/local/lib:/usr/lib
这两个地址,所以很多的时候存在缺少文件的提示,上面的文件错误提示也能通过ln -s /opt/brcm-arm/lib/libmpc.so.2 /usr/local/lib/libmpc.so.2
来解决。