进入iptables-1.4.21目录后
1 首先导出交叉编译器的路径:
export PATH=$PATH:/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/
2 配置configure:
./configure --enable-static --disable-shared --prefix=$PWD/bin CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi
解析参考./configure --help输出。arm-none-linux-gnueabi可以替换不同的工具链名称,--enable-static --disable-shared 指定静态编译,--prefix=$PWD/bin指定make install后的安装目录,这里设置为当前目录下的bin目录
注意:iptables-1.4.21针对静态编译有BUG,加了--enable-static --disable-shared 无效,编译出来的依旧是动态的。我尝试修改Makefile也不行,可能技术不够,改的地方不对。网上说1.2之前的版本支持静态编译。
3 在当前目录下建立bin目录:mkdir bin
4 编译:make
5 安装:make install
6 查看编译出来的文件:最终文件是xtables-multi,但是不能直接运行xtables-multi,必须建立软连接或者重命名。否则出现
ip6tables -> xtables-multi*
ip6tables-restore -> xtables-multi*
ip6tables-save -> xtables-multi*
iptables -> xtables-multi*
iptables-restore -> xtables-multi*
iptables-save -> xtables-multi*
xtables-multi*
查看是否是文件类型: file xtables-multi
xtables-multi: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, not stripped
可以看出此动态连接。
直接运行xtables-multi,会出现以下异常信息:
/bin # xtables-multi
ERROR: No valid subcommand given.
Valid subcommands:
* iptables
* main4
* iptables-save
* save4
* iptables-restore
* restore4
* iptables-xml
* xml
* ip6tables
* main6
* ip6tables-save
* save6
* ip6tables-restore
* restore6
/bin #
这样需要建立软链接或者直接mv xtables-multi iptables即可以正常使用。