13年9个月前IP:未同步
511106
10楼
使用 OpenWrt SDK 交叉编译 gnokii 的过程
这一楼用来记录小光使用 OpenWrt SDK 交叉编译 gnokii 的过程

因为要使用路由器控制TC35发送短信,所以用到gnokii程序,官方网站如下:
XXXXXXXXXXXXXXXXXX

交叉编译大型软件不同于编写 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/ -s
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 /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
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/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便可以在你的路由器中运行。 无标题.png
评论
文号 / 511106

万流景仰
名片发私信
学术分 15
总主题 317 帖总回复 5576 楼拥有证书:进士 学者 机友 笔友
注册于 2008/03/06 02:57:45最后登录 2026/10/20 13:40:53
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

Inspiration, Innovation, Discovery

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的