这一楼用来记录小光使用 OpenWrt SDK 交叉编译 gnokii 的过程
因为要使用路由器控制TC35发送短信,所以用到gnokii程序,官方网站如下:
XXXXXXXXXXXXXXXXX/交叉编译大型软件不同于编写 HelloWorld,所以需要更为严谨的环境配置,放弃楼主位中第三步的用法,转而使用官方维基推荐的方式,并手动将存放SDK的目录被解压至/opt/目录下,我写了一个脚本文件来实现环境变量的设置,内容如下:
PATH=$PATH:"/opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin"
export PATH
STAGING_DIR="/opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir"
export STAGING_DIR
bash
PATH的作用是把SDK中的编译器放进环境变量,STAGING_DIR我也不知道是做什么用的,但是官方让写,就写了,最下面的bash是在刚刚配置好的环境变量下再开一个shell,否则脚本执行完毕环境变量就会被释放
进入 gnokii 的目录进行configure,我使用如下命令进行交叉编译的配置,并关闭了一些不需要的功能
./configure --prefix=/usr/local/gnokii --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc --disable-xdebug --disable-fulldebug --disable-rlpdebug --disable-irda --disable-phonet
使用gmake命令进行编译,编译过程中可能会提示缺少一些所需的库文件,通常你可以在SDK中的一个target-***的子文件夹中找到它们,把它们复制到toolchain-***相应的子文件夹中以便继续编译工作,复制时可在cp命令中加-s参数创建软连接而非复制文件,我复制了XXXXXXXXXXXXXX.0、XXXXXXXXXXXXXX、XXXXXXXXXXXXXXXXX 这3个文件,使用如下命令:cp /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/target-mips_r2_uClibc-0.9.33.2/root-ar71xx/usr/lib/XXXXXXXXXXXXXX.0 /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/ -scp /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/target-mips_r2_uClibc-0.9.33.2/root-ar71xx/usr/lib/XXXXXXXXXXXXXX /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib -scp /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/lib/XXXXXXXXXXXXXXXXX /opt/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/ -s编译完成后,使用gmake install把编译好的软件复制到指定的prefix中,非root用户使用sudo方式可能遇到“ [install-libLTLIBRARIES] Error 127”的报错,是因为sudo中没有环境变量的缘故,请使用su命令直接进入root权限后再执行一遍之前所述的脚本,以便设置好环境变量。
cd到prefix的目录上一层(如我的是“/usr/local/gnokii”),并使用tar -zcf gnokii.tar.gz gnokii命令打包编译好的gnokii,注意不要使用tar中的-j参数,openwrt不具备解压它的能力,使用楼主位中所述的scp命令把打包好的gnokii复制到路由器的/tmp/目录下,这个目录通常有很大余量,大小由路由器内存决定,软件存放至此可以避免填满路由器的闪存,但重启后软件会消失。
gnokii在路由器中解压好后,运行时可能会提示需要“XXXXXXXXXXXX.7”库,你可以在刚解压好的gnokii目录中找到它,并软连接至/lib/目录,接下来还可能会提示需要“XXXXXXXXXXXXXX.0”库,在路由器的GUI管理界面中安装“glib2”包可解决该问题。至此如果一切顺利,gnokii便可以在你的路由器中运行。